/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * DescribeCronJobs request structure.
 * @class
 */
class DescribeCronJobsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of Project ID.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

        /**
         * Offset. Default value is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returns.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Array of CronJob ID.
         * @type {Array.<string> || null}
         */
        this.CronJobIds = null;

        /**
         * CronJob name, fuzzy query.
         * @type {string || null}
         */
        this.CronJobName = null;

        /**
         * Array of CronJob status.
         * @type {Array.<number> || null}
         */
        this.CronJobStatus = null;

        /**
         * Column for sorting.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Whether in ascending order.
         * @type {boolean || null}
         */
        this.Ascend = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.CronJobIds = 'CronJobIds' in params ? params.CronJobIds : null;
        this.CronJobName = 'CronJobName' in params ? params.CronJobName : null;
        this.CronJobStatus = 'CronJobStatus' in params ? params.CronJobStatus : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.Ascend = 'Ascend' in params ? params.Ascend : null;

    }
}

/**
 * UpdateJob request structure.
 * @class
 */
class UpdateJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Job note.
         * @type {string || null}
         */
        this.Note = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.Note = 'Note' in params ? params.Note : null;

    }
}

/**
 * UpdateCronJob response structure.
 * @class
 */
class UpdateCronJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSampleMatrixQuery response structure.
 * @class
 */
class DescribeSampleMatrixQueryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric matrix.

Note: This field may return null, indicating that no valid value is found.
         * @type {CustomSampleMatrix || null}
         */
        this.MetricSampleMatrix = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MetricSampleMatrix) {
            let obj = new CustomSampleMatrix();
            obj.deserialize(params.MetricSampleMatrix)
            this.MetricSampleMatrix = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSampleLogs request structure.
 * @class
 */
class DescribeSampleLogsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Context is used when loading more logs. Pass through the Context value returned last time to retrieve subsequent log content. The expiration time is 1 hour.
         * @type {string || null}
         */
        this.Context = null;

        /**
         * Log start time.
         * @type {string || null}
         */
        this.From = null;

        /**
         * Log end time.
         * @type {string || null}
         */
        this.To = null;

        /**
         * Log levels, such as debug, info, error.
         * @type {string || null}
         */
        this.SeverityText = null;

        /**
         * Region of pressure engine instance, such as ap-shanghai, ap-guangzhou.
         * @type {string || null}
         */
        this.InstanceRegion = null;

        /**
         * IP of pressure engine instance.
         * @type {string || null}
         */
        this.Instance = null;

        /**
         * Type of log, can be left empty. 'Request' represents sampling logs.
         * @type {string || null}
         */
        this.LogType = null;

        /**
         * Number of returned logs, maximum 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Response time range of sampling logs.
         * @type {ReactionTimeRange || null}
         */
        this.ReactionTimeRange = null;

        /**
         * Status code of sampling logs.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Result code of sampling logs.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * Request method of sampling logs.
         * @type {string || null}
         */
        this.Method = null;

        /**
         * Request service of sampling logs.
         * @type {string || null}
         */
        this.Service = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.Context = 'Context' in params ? params.Context : null;
        this.From = 'From' in params ? params.From : null;
        this.To = 'To' in params ? params.To : null;
        this.SeverityText = 'SeverityText' in params ? params.SeverityText : null;
        this.InstanceRegion = 'InstanceRegion' in params ? params.InstanceRegion : null;
        this.Instance = 'Instance' in params ? params.Instance : null;
        this.LogType = 'LogType' in params ? params.LogType : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.ReactionTimeRange) {
            let obj = new ReactionTimeRange();
            obj.deserialize(params.ReactionTimeRange)
            this.ReactionTimeRange = obj;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.Method = 'Method' in params ? params.Method : null;
        this.Service = 'Service' in params ? params.Service : null;

    }
}

/**
 * DeleteJobs request structure.
 * @class
 */
class DeleteJobsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of Job ID to be deleted.
         * @type {Array.<string> || null}
         */
        this.JobIds = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Array of Scenario ID.
         * @type {Array.<string> || null}
         */
        this.ScenarioIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobIds = 'JobIds' in params ? params.JobIds : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioIds = 'ScenarioIds' in params ? params.ScenarioIds : null;

    }
}

/**
 * Alert notification recipient group.
 * @class
 */
class AlertChannelRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * Notice ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.NoticeId = null;

        /**
         * Consumer ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.AMPConsumerId = null;

        /**
         * Project ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Status.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Create time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Update time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * App ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Account uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Sub account uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.SubAccountUin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NoticeId = 'NoticeId' in params ? params.NoticeId : null;
        this.AMPConsumerId = 'AMPConsumerId' in params ? params.AMPConsumerId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.SubAccountUin = 'SubAccountUin' in params ? params.SubAccountUin : null;

    }
}

/**
 * DescribeAlertRecords request structure.
 * @class
 */
class DescribeAlertRecordsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of Project ID.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

        /**
         * Array of Scenario ID.
         * @type {Array.<string> || null}
         */
        this.ScenarioIds = null;

        /**
         * Array of Job ID.
         * @type {Array.<string> || null}
         */
        this.JobIds = null;

        /**
         * Whether in ascending order.
         * @type {boolean || null}
         */
        this.Ascend = null;

        /**
         * Column for sorting.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Offset. Default value is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returns. Default value is 20, maximum is 100
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filter by Scenario names.
         * @type {Array.<string> || null}
         */
        this.ScenarioNames = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;
        this.ScenarioIds = 'ScenarioIds' in params ? params.ScenarioIds : null;
        this.JobIds = 'JobIds' in params ? params.JobIds : null;
        this.Ascend = 'Ascend' in params ? params.Ascend : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.ScenarioNames = 'ScenarioNames' in params ? params.ScenarioNames : null;

    }
}

/**
 * DeleteAlertChannel response structure.
 * @class
 */
class DeleteAlertChannelResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeLabelValues request structure.
 * @class
 */
class DescribeLabelValuesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Metric name. For the value range, refer to all metric names returned by the DescribeMetricLabelWithValues API.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * Label name. For the value range, refer to the metrics and label names returned by the DescribeMetricLabelWithValues API.
         * @type {string || null}
         */
        this.LabelName = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.LabelName = 'LabelName' in params ? params.LabelName : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * AbortCronJobs response structure.
 * @class
 */
class AbortCronJobsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRequestSummary response structure.
 * @class
 */
class DescribeRequestSummaryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Request summary information.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<RequestSummary> || null}
         */
        this.RequestSummarySet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RequestSummarySet) {
            this.RequestSummarySet = new Array();
            for (let z in params.RequestSummarySet) {
                let obj = new RequestSummary();
                obj.deserialize(params.RequestSummarySet[z]);
                this.RequestSummarySet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeScenarioWithJobs request structure.
 * @class
 */
class DescribeScenarioWithJobsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Offset. Default value is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returns. Default value is 20, maximum is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Array of Project ID.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

        /**
         * Array of Scenario ID.
         * @type {Array.<string> || null}
         */
        this.ScenarioIds = null;

        /**
         * Scenario Name.
         * @type {string || null}
         */
        this.ScenarioName = null;

        /**
         * Array of Scenario status.
         * @type {number || null}
         */
        this.ScenarioStatus = null;

        /**
         * Column for sorting.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Whether in ascending order.
         * @type {boolean || null}
         */
        this.Ascend = null;

        /**
         * Parameters related to job.
         * @type {ScenarioRelatedJobsParams || null}
         */
        this.ScenarioRelatedJobsParams = null;

        /**
         * Whether to return the test script content of the scenario.
         * @type {boolean || null}
         */
        this.IgnoreScript = null;

        /**
         * Whether to return test data file information of the scenario.
         * @type {boolean || null}
         */
        this.IgnoreDataset = null;

        /**
         * Scenario type, such as pts-http, pts-js, pts-jmeter.
         * @type {string || null}
         */
        this.ScenarioType = null;

        /**
         * Creator.
         * @type {string || null}
         */
        this.Owner = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;
        this.ScenarioIds = 'ScenarioIds' in params ? params.ScenarioIds : null;
        this.ScenarioName = 'ScenarioName' in params ? params.ScenarioName : null;
        this.ScenarioStatus = 'ScenarioStatus' in params ? params.ScenarioStatus : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.Ascend = 'Ascend' in params ? params.Ascend : null;

        if (params.ScenarioRelatedJobsParams) {
            let obj = new ScenarioRelatedJobsParams();
            obj.deserialize(params.ScenarioRelatedJobsParams)
            this.ScenarioRelatedJobsParams = obj;
        }
        this.IgnoreScript = 'IgnoreScript' in params ? params.IgnoreScript : null;
        this.IgnoreDataset = 'IgnoreDataset' in params ? params.IgnoreDataset : null;
        this.ScenarioType = 'ScenarioType' in params ? params.ScenarioType : null;
        this.Owner = 'Owner' in params ? params.Owner : null;

    }
}

/**
 * CreateCronJob response structure.
 * @class
 */
class CreateCronJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cron job ID.
         * @type {string || null}
         */
        this.CronJobId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CronJobId = 'CronJobId' in params ? params.CronJobId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RestartCronJobs response structure.
 * @class
 */
class RestartCronJobsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SLA policy.
 * @class
 */
class SLAPolicy extends  AbstractModel {
    constructor(){
        super();

        /**
         * SLA rules.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<SLARule> || null}
         */
        this.SLARules = null;

        /**
         * Alert notification channel.

Note: This field may return null, indicating that no valid value is found.
         * @type {AlertChannel || null}
         */
        this.AlertChannel = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.SLARules) {
            this.SLARules = new Array();
            for (let z in params.SLARules) {
                let obj = new SLARule();
                obj.deserialize(params.SLARules[z]);
                this.SLARules.push(obj);
            }
        }

        if (params.AlertChannel) {
            let obj = new AlertChannel();
            obj.deserialize(params.AlertChannel)
            this.AlertChannel = obj;
        }

    }
}

/**
 * DNS configuration of the pressure machine.
 * @class
 */
class DNSConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * DNS IP list.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.Nameservers = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Nameservers = 'Nameservers' in params ? params.Nameservers : null;

    }
}

/**
 * Performance test script information.
 * @class
 */
class ScriptInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filename.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * File size.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Size = null;

        /**
         * File type.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Update time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * Base64-encoded file content.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.EncodedContent = null;

        /**
         * Base64-encoded har structure.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.EncodedHttpArchive = null;

        /**
         * Script weight, range 1-100.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.LoadWeight = null;

        /**
         * File ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.FileId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.EncodedContent = 'EncodedContent' in params ? params.EncodedContent : null;
        this.EncodedHttpArchive = 'EncodedHttpArchive' in params ? params.EncodedHttpArchive : null;
        this.LoadWeight = 'LoadWeight' in params ? params.LoadWeight : null;
        this.FileId = 'FileId' in params ? params.FileId : null;

    }
}

/**
 * General log struct.
 * @class
 */
class NormalLog extends  AbstractModel {
    constructor(){
        super();

        /**
         * Timestamp in milliseconds.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Timestamp = null;

        /**
         * Log level.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.SeverityText = null;

        /**
         * Log output content.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Body = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Timestamp = 'Timestamp' in params ? params.Timestamp : null;
        this.SeverityText = 'SeverityText' in params ? params.SeverityText : null;
        this.Body = 'Body' in params ? params.Body : null;

    }
}

/**
 * UpdateProject request structure.
 * @class
 */
class UpdateProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Project name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Project description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Project status, default value 1
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Tags.
         * @type {Array.<TagSpec> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new TagSpec();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * AbortJob response structure.
 * @class
 */
class AbortJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Project.
 * @class
 */
class Project extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Project name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Project description.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Tags.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<TagSpec> || null}
         */
        this.Tags = null;

        /**
         * Project status.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Create time.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Update time.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * App ID.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Uin.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Sub account uin.
         * @type {string || null}
         */
        this.SubAccountUin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new TagSpec();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.SubAccountUin = 'SubAccountUin' in params ? params.SubAccountUin : null;

    }
}

/**
 * UpdateEnvironment request structure.
 * @class
 */
class UpdateEnvironmentRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DescribeRegions response structure.
 * @class
 */
class DescribeRegionsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of regions.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<RegionDetail> || null}
         */
        this.RegionSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.RegionSet) {
            this.RegionSet = new Array();
            for (let z in params.RegionSet) {
                let obj = new RegionDetail();
                obj.deserialize(params.RegionSet[z]);
                this.RegionSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Sampling log attributes
 * @class
 */
class Attributes extends  AbstractModel {
    constructor(){
        super();

        /**
         * Response status code.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Response result code.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * Request service.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Service = null;

        /**
         * Request method.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Method = null;

        /**
         * Request duration.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Duration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.Service = 'Service' in params ? params.Service : null;
        this.Method = 'Method' in params ? params.Method : null;
        this.Duration = 'Duration' in params ? params.Duration : null;

    }
}

/**
 * CreateEnvironment response structure.
 * @class
 */
class CreateEnvironmentResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateScenario response structure.
 * @class
 */
class UpdateScenarioResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * File.
 * @class
 */
class File extends  AbstractModel {
    constructor(){
        super();

        /**
         * File ID.
         * @type {string || null}
         */
        this.FileId = null;

        /**
         * File type. 1 represents parameter file, 2 represents protocol file, 3 represents request file.
         * @type {number || null}
         */
        this.Kind = null;

        /**
         * Filename.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * File size.
         * @type {number || null}
         */
        this.Size = null;

        /**
         * File type. The 'folder' represents a folder; if not specified, it represents a normal file.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Update time.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * Number of file lines.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.LineCount = null;

        /**
         * First few rows of file.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.HeadLines = null;

        /**
         * Last few rows of file.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.TailLines = null;

        /**
         * Whether the header is in the file.

Note: This field may return null, indicating that no valid value is found.
         * @type {boolean || null}
         */
        this.HeaderInFile = null;

        /**
         * Parameter name.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.HeaderColumns = null;

        /**
         * Files in the folder.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<FileInfo> || null}
         */
        this.FileInfos = null;

        /**
         * Associated scenario.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<Scenario> || null}
         */
        this.ScenarioSet = null;

        /**
         * File status.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Create time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Project ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.AppID = null;

        /**
         * Uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Sub account uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.SubAccountUin = null;

        /**
         * App ID of user account.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.AppId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FileId = 'FileId' in params ? params.FileId : null;
        this.Kind = 'Kind' in params ? params.Kind : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.LineCount = 'LineCount' in params ? params.LineCount : null;
        this.HeadLines = 'HeadLines' in params ? params.HeadLines : null;
        this.TailLines = 'TailLines' in params ? params.TailLines : null;
        this.HeaderInFile = 'HeaderInFile' in params ? params.HeaderInFile : null;
        this.HeaderColumns = 'HeaderColumns' in params ? params.HeaderColumns : null;

        if (params.FileInfos) {
            this.FileInfos = new Array();
            for (let z in params.FileInfos) {
                let obj = new FileInfo();
                obj.deserialize(params.FileInfos[z]);
                this.FileInfos.push(obj);
            }
        }

        if (params.ScenarioSet) {
            this.ScenarioSet = new Array();
            for (let z in params.ScenarioSet) {
                let obj = new Scenario();
                obj.deserialize(params.ScenarioSet[z]);
                this.ScenarioSet.push(obj);
            }
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.AppID = 'AppID' in params ? params.AppID : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.SubAccountUin = 'SubAccountUin' in params ? params.SubAccountUin : null;
        this.AppId = 'AppId' in params ? params.AppId : null;

    }
}

/**
 * DescribeEnvironments request structure.
 * @class
 */
class DescribeEnvironmentsRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * Sample includes metric, aggregation from original metric query statement.
 * @class
 */
class CustomSample extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * Aggregation condition.
         * @type {string || null}
         */
        this.Aggregation = null;

        /**
         * Label filter.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<Label> || null}
         */
        this.Labels = null;

        /**
         * Value obtained from the query.
         * @type {number || null}
         */
        this.Value = null;

        /**
         * Time is the number of milliseconds since the epoch (1970-01-01 00:00 UTC) excluding leap seconds.
         * @type {number || null}
         */
        this.Timestamp = null;

        /**
         * Unit corresponding to the metric, including s(second), bytes, bytes/s, reqs, reqs/s, checks, checks/s, iters, iters/s, VUs, %.
         * @type {string || null}
         */
        this.Unit = null;

        /**
         * Metric name in PTS.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Name = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.Aggregation = 'Aggregation' in params ? params.Aggregation : null;

        if (params.Labels) {
            this.Labels = new Array();
            for (let z in params.Labels) {
                let obj = new Label();
                obj.deserialize(params.Labels[z]);
                this.Labels.push(obj);
            }
        }
        this.Value = 'Value' in params ? params.Value : null;
        this.Timestamp = 'Timestamp' in params ? params.Timestamp : null;
        this.Unit = 'Unit' in params ? params.Unit : null;
        this.Name = 'Name' in params ? params.Name : null;

    }
}

/**
 * CreateProject request structure.
 * @class
 */
class CreateProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Project description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Array of tags.
         * @type {Array.<TagSpec> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;

        if (params.Tags) {
            this.Tags = new Array();
            for (let z in params.Tags) {
                let obj = new TagSpec();
                obj.deserialize(params.Tags[z]);
                this.Tags.push(obj);
            }
        }

    }
}

/**
 * AdjustJobSpeed request structure.
 * @class
 */
class AdjustJobSpeedRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Target RPS. The value should be greater than the initial RPS and less than the maximum RPS.
         * @type {number || null}
         */
        this.TargetRequestsPerSecond = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.TargetRequestsPerSecond = 'TargetRequestsPerSecond' in params ? params.TargetRequestsPerSecond : null;

    }
}

/**
 * DescribeRequestSummary request structure.
 * @class
 */
class DescribeRequestSummaryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * Domain configuration of the pressure machine.
 * @class
 */
class HostAlias extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain list to be bound.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.HostNames = null;

        /**
         * IP address to be bound.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.IP = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.HostNames = 'HostNames' in params ? params.HostNames : null;
        this.IP = 'IP' in params ? params.IP : null;

    }
}

/**
 * CreateFile response structure.
 * @class
 */
class CreateFileResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteProjects response structure.
 * @class
 */
class DeleteProjectsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Load distribution configuration.
 * @class
 */
class GeoRegionsLoadItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region ID.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Region.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Percentage.
         * @type {number || null}
         */
        this.Percentage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.Percentage = 'Percentage' in params ? params.Percentage : null;

    }
}

/**
 * UpdateEnvironment response structure.
 * @class
 */
class UpdateEnvironmentResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Label name and value.
 * @class
 */
class LabelWithValues extends  AbstractModel {
    constructor(){
        super();

        /**
         * Label Name.
         * @type {string || null}
         */
        this.LabelName = null;

        /**
         * Label values.
         * @type {Array.<string> || null}
         */
        this.LabelValues = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LabelName = 'LabelName' in params ? params.LabelName : null;
        this.LabelValues = 'LabelValues' in params ? params.LabelValues : null;

    }
}

/**
 * Contains label name and label value.
 * @class
 */
class Label extends  AbstractModel {
    constructor(){
        super();

        /**
         * Label name.
         * @type {string || null}
         */
        this.LabelName = null;

        /**
         * Label value.
         * @type {string || null}
         */
        this.LabelValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LabelName = 'LabelName' in params ? params.LabelName : null;
        this.LabelValue = 'LabelValue' in params ? params.LabelValue : null;

    }
}

/**
 * Protocol file information.
 * @class
 */
class ProtocolInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * File size.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Size = null;

        /**
         * File type, such as 'proto'.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Update time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * File ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.FileId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.FileId = 'FileId' in params ? params.FileId : null;

    }
}

/**
 * Load specification in vpc mode
 * @class
 */
class VpcLoadDistribution extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region ID.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Region.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * VPC ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * List of subnet IDs.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.SubnetIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetIds = 'SubnetIds' in params ? params.SubnetIds : null;

    }
}

/**
 * Metric sample value with timestamp.
 * @class
 */
class SamplePair extends  AbstractModel {
    constructor(){
        super();

        /**
         * Timestamp. It is the number of milliseconds since the epoch (1970-01-01 00:00 UTC) excluding leap seconds.
         * @type {number || null}
         */
        this.Timestamp = null;

        /**
         * Value of a given sample at a given time.
         * @type {number || null}
         */
        this.Value = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Timestamp = 'Timestamp' in params ? params.Timestamp : null;
        this.Value = 'Value' in params ? params.Value : null;

    }
}

/**
 * Cron job.
 * @class
 */
class CronJob extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cron job ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.CronJobId = null;

        /**
         * Cron job name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Project ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Scenario name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ScenarioName = null;

        /**
         * Cron expression.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.CronExpression = null;

        /**
         * End time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Abort reason.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.AbortReason = null;

        /**
         * Cron job status.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Notice ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.NoticeId = null;

        /**
         * Create time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Update time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * Execution frequency type: 1, execute once only; 2, Daily; 3, Weekly; 4, Advanced mode using cron expression.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.FrequencyType = null;

        /**
         * Note.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Cron job initiator.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.JobOwner = null;

        /**
         * App ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Account uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Sub account uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.SubAccountUin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CronJobId = 'CronJobId' in params ? params.CronJobId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.ScenarioName = 'ScenarioName' in params ? params.ScenarioName : null;
        this.CronExpression = 'CronExpression' in params ? params.CronExpression : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.AbortReason = 'AbortReason' in params ? params.AbortReason : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.NoticeId = 'NoticeId' in params ? params.NoticeId : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.FrequencyType = 'FrequencyType' in params ? params.FrequencyType : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.JobOwner = 'JobOwner' in params ? params.JobOwner : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.SubAccountUin = 'SubAccountUin' in params ? params.SubAccountUin : null;

    }
}

/**
 * DescribeLabelValues response structure.
 * @class
 */
class DescribeLabelValuesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of label values.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.LabelValueSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LabelValueSet = 'LabelValueSet' in params ? params.LabelValueSet : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * General metric query structure.
 * @class
 */
class InternalMetricQuery extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * Aggregation Function, optional value including Rate, Count, Avg, P90, P95, P99, Gauge.
         * @type {string || null}
         */
        this.Aggregation = null;

        /**
         * Deprecated, please use 'Filters'.
         * @type {Array.<Label> || null}
         */
        this.Labels = null;

        /**
         * Use label filter rules to filter metrics. Rules include LabelName, LabelValue, and Operator (0 means equal, 1 means not equal).
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Metric group.
         * @type {Array.<string> || null}
         */
        this.GroupBy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.Aggregation = 'Aggregation' in params ? params.Aggregation : null;

        if (params.Labels) {
            this.Labels = new Array();
            for (let z in params.Labels) {
                let obj = new Label();
                obj.deserialize(params.Labels[z]);
                this.Labels.push(obj);
            }
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.GroupBy = 'GroupBy' in params ? params.GroupBy : null;

    }
}

/**
 * Performance test job.
 * @class
 */
class Job extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Scenario ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Load configuration.

Note: This field may return null, indicating that no valid value is found.
         * @type {Load || null}
         */
        this.Load = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.Configs = null;

        /**
         * Test datasets.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<TestData> || null}
         */
        this.Datasets = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.Extensions = null;

        /**
         * Job status, values including:
JobUnknown: 0, JobCreated: 1, JobPending: 2, JobPreparing: 3, JobSelectClustering: 4, JobCreateTasking: 5, JobSyncTasking: 6,
JobRunning:11,JobFinished:12,JobPrepareException:13,JobFinishException:14,JobAborting:15,JobAborted:16,JobAbortException:17,JobDeleted:18,
JobSelectClusterException:19,JobCreateTaskException:20,JobSyncTaskException:21

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Start time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Maximum VU.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.MaxVirtualUserCount = null;

        /**
         * Note.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Error rate percentage.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.ErrorRate = null;

        /**
         * Job owner.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.JobOwner = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {LoadSource || null}
         */
        this.LoadSources = null;

        /**
         * Job duration.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Duration = null;

        /**
         * Maximum requests per second.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.MaxRequestsPerSecond = null;

        /**
         * Total number of requests.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.RequestTotal = null;

        /**
         * Average requests per second.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.RequestsPerSecond = null;

        /**
         * Average response time.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.ResponseTimeAverage = null;

        /**
         * 99th percentile response time.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.ResponseTimeP99 = null;

        /**
         * 95th percentile response time.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.ResponseTimeP95 = null;

        /**
         * 90th percentile response time.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.ResponseTimeP90 = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.Scripts = null;

        /**
         * Maximum response time.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.ResponseTimeMax = null;

        /**
         * Minimum response time.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.ResponseTimeMin = null;

        /**
         * Stress machine information.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<LoadSource> || null}
         */
        this.LoadSourceInfos = null;

        /**
         * Test script information.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<ScriptInfo> || null}
         */
        this.TestScripts = null;

        /**
         * Protocol file information.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<ProtocolInfo> || null}
         */
        this.Protocols = null;

        /**
         * Request file information.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<FileInfo> || null}
         */
        this.RequestFiles = null;

        /**
         * Extension file information.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<FileInfo> || null}
         */
        this.Plugins = null;

        /**
         * Cron job ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.CronId = null;

        /**
         * Scenario type.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Domain binding configuration.

Note: This field may return null, indicating that no valid value is found.
         * @type {DomainNameConfig || null}
         */
        this.DomainNameConfig = null;

        /**
         * Whether the job is a debug job.

Note: This field may return null, indicating that no valid value is found.
         * @type {boolean || null}
         */
        this.Debug = null;

        /**
         * Abort reason.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.AbortReason = null;

        /**
         * Create Time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Project ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Notification event callback.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<NotificationHook> || null}
         */
        this.NotificationHooks = null;

        /**
         * Bytes received per second.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.NetworkReceiveRate = null;

        /**
         * Bytes sent per second.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.NetworkSendRate = null;

        /**
         * Job status description.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Project name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ProjectName = null;

        /**
         * Scenario name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ScenarioName = null;

        /**
         * Billing type.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Job VUM usage.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Usage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;

        if (params.Load) {
            let obj = new Load();
            obj.deserialize(params.Load)
            this.Load = obj;
        }
        this.Configs = 'Configs' in params ? params.Configs : null;

        if (params.Datasets) {
            this.Datasets = new Array();
            for (let z in params.Datasets) {
                let obj = new TestData();
                obj.deserialize(params.Datasets[z]);
                this.Datasets.push(obj);
            }
        }
        this.Extensions = 'Extensions' in params ? params.Extensions : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.MaxVirtualUserCount = 'MaxVirtualUserCount' in params ? params.MaxVirtualUserCount : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.ErrorRate = 'ErrorRate' in params ? params.ErrorRate : null;
        this.JobOwner = 'JobOwner' in params ? params.JobOwner : null;

        if (params.LoadSources) {
            let obj = new LoadSource();
            obj.deserialize(params.LoadSources)
            this.LoadSources = obj;
        }
        this.Duration = 'Duration' in params ? params.Duration : null;
        this.MaxRequestsPerSecond = 'MaxRequestsPerSecond' in params ? params.MaxRequestsPerSecond : null;
        this.RequestTotal = 'RequestTotal' in params ? params.RequestTotal : null;
        this.RequestsPerSecond = 'RequestsPerSecond' in params ? params.RequestsPerSecond : null;
        this.ResponseTimeAverage = 'ResponseTimeAverage' in params ? params.ResponseTimeAverage : null;
        this.ResponseTimeP99 = 'ResponseTimeP99' in params ? params.ResponseTimeP99 : null;
        this.ResponseTimeP95 = 'ResponseTimeP95' in params ? params.ResponseTimeP95 : null;
        this.ResponseTimeP90 = 'ResponseTimeP90' in params ? params.ResponseTimeP90 : null;
        this.Scripts = 'Scripts' in params ? params.Scripts : null;
        this.ResponseTimeMax = 'ResponseTimeMax' in params ? params.ResponseTimeMax : null;
        this.ResponseTimeMin = 'ResponseTimeMin' in params ? params.ResponseTimeMin : null;

        if (params.LoadSourceInfos) {
            this.LoadSourceInfos = new Array();
            for (let z in params.LoadSourceInfos) {
                let obj = new LoadSource();
                obj.deserialize(params.LoadSourceInfos[z]);
                this.LoadSourceInfos.push(obj);
            }
        }

        if (params.TestScripts) {
            this.TestScripts = new Array();
            for (let z in params.TestScripts) {
                let obj = new ScriptInfo();
                obj.deserialize(params.TestScripts[z]);
                this.TestScripts.push(obj);
            }
        }

        if (params.Protocols) {
            this.Protocols = new Array();
            for (let z in params.Protocols) {
                let obj = new ProtocolInfo();
                obj.deserialize(params.Protocols[z]);
                this.Protocols.push(obj);
            }
        }

        if (params.RequestFiles) {
            this.RequestFiles = new Array();
            for (let z in params.RequestFiles) {
                let obj = new FileInfo();
                obj.deserialize(params.RequestFiles[z]);
                this.RequestFiles.push(obj);
            }
        }

        if (params.Plugins) {
            this.Plugins = new Array();
            for (let z in params.Plugins) {
                let obj = new FileInfo();
                obj.deserialize(params.Plugins[z]);
                this.Plugins.push(obj);
            }
        }
        this.CronId = 'CronId' in params ? params.CronId : null;
        this.Type = 'Type' in params ? params.Type : null;

        if (params.DomainNameConfig) {
            let obj = new DomainNameConfig();
            obj.deserialize(params.DomainNameConfig)
            this.DomainNameConfig = obj;
        }
        this.Debug = 'Debug' in params ? params.Debug : null;
        this.AbortReason = 'AbortReason' in params ? params.AbortReason : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

        if (params.NotificationHooks) {
            this.NotificationHooks = new Array();
            for (let z in params.NotificationHooks) {
                let obj = new NotificationHook();
                obj.deserialize(params.NotificationHooks[z]);
                this.NotificationHooks.push(obj);
            }
        }
        this.NetworkReceiveRate = 'NetworkReceiveRate' in params ? params.NetworkReceiveRate : null;
        this.NetworkSendRate = 'NetworkSendRate' in params ? params.NetworkSendRate : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.ProjectName = 'ProjectName' in params ? params.ProjectName : null;
        this.ScenarioName = 'ScenarioName' in params ? params.ScenarioName : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.Usage = 'Usage' in params ? params.Usage : null;

    }
}

/**
 * DescribeAvailableMetrics request structure.
 * @class
 */
class DescribeAvailableMetricsRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * CopyScenario response structure.
 * @class
 */
class CopyScenarioResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Newly copied scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSampleMatrixQuery request structure.
 * @class
 */
class DescribeSampleMatrixQueryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Metric name. For the value range, refer to all metric names returned by the DescribeMetricLabelWithValues API.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * Aggregation function. Range of values: Rate, Count, Avg, P90, P95, P99, Gauge.
         * @type {string || null}
         */
        this.Aggregation = null;

        /**
         * Use label rules to filter metrics. Rules include label name, label value, and operator (0 means equal, 1 means not equal).
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Labels used for grouping, similar to group by in PromQL.


         * @type {Array.<string> || null}
         */
        this.GroupBy = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.Aggregation = 'Aggregation' in params ? params.Aggregation : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.GroupBy = 'GroupBy' in params ? params.GroupBy : null;

    }
}

/**
 * GenerateTmpKey response structure.
 * @class
 */
class GenerateTmpKeyResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Timestamp when the temporary access credentials are obtained (unit: seconds).
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * Timestamp when the temporary access credentials expire (unit: seconds).
         * @type {number || null}
         */
        this.ExpiredTime = null;

        /**
         * Temporary access credentials.
         * @type {Credentials || null}
         */
        this.Credentials = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.ExpiredTime = 'ExpiredTime' in params ? params.ExpiredTime : null;

        if (params.Credentials) {
            let obj = new Credentials();
            obj.deserialize(params.Credentials)
            this.Credentials = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Load configuration for a single stage in concurrency mode
 * @class
 */
class Stage extends  AbstractModel {
    constructor(){
        super();

        /**
         * Duration time of this stage.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.DurationSeconds = null;

        /**
         * Target number of virtual users.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.TargetVirtualUsers = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DurationSeconds = 'DurationSeconds' in params ? params.DurationSeconds : null;
        this.TargetVirtualUsers = 'TargetVirtualUsers' in params ? params.TargetVirtualUsers : null;

    }
}

/**
 * DescribeFiles response structure.
 * @class
 */
class DescribeFilesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * File list.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<File> || null}
         */
        this.FileSet = null;

        /**
         * Total number of files.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.FileSet) {
            this.FileSet = new Array();
            for (let z in params.FileSet) {
                let obj = new File();
                obj.deserialize(params.FileSet[z]);
                this.FileSet.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteProjects request structure.
 * @class
 */
class DeleteProjectsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of Project ID to be deleted.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

        /**
         * Whether to delete project-related scenarios. The default value is false.
         * @type {boolean || null}
         */
        this.DeleteScenarios = null;

        /**
         * Whether to delete project-related jobs. The default value is false.
         * @type {boolean || null}
         */
        this.DeleteJobs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;
        this.DeleteScenarios = 'DeleteScenarios' in params ? params.DeleteScenarios : null;
        this.DeleteJobs = 'DeleteJobs' in params ? params.DeleteJobs : null;

    }
}

/**
 * UpdateFileScenarioRelation request structure.
 * @class
 */
class UpdateFileScenarioRelationRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * File ID. Its value should be the corresponding directory of the file in the COS bucket after it has been uploaded in the previous step.
         * @type {string || null}
         */
        this.FileId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Array of Scenario ID.
         * @type {Array.<string> || null}
         */
        this.ScenarioIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FileId = 'FileId' in params ? params.FileId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioIds = 'ScenarioIds' in params ? params.ScenarioIds : null;

    }
}

/**
 * Scenario with jobs.
 * @class
 */
class ScenarioWithJobs extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scenario.

Note: This field may return null, indicating that no valid value is found.
         * @type {Scenario || null}
         */
        this.Scenario = null;

        /**
         * Job list.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<Job> || null}
         */
        this.Jobs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Scenario) {
            let obj = new Scenario();
            obj.deserialize(params.Scenario)
            this.Scenario = obj;
        }

        if (params.Jobs) {
            this.Jobs = new Array();
            for (let z in params.Jobs) {
                let obj = new Job();
                obj.deserialize(params.Jobs[z]);
                this.Jobs.push(obj);
            }
        }

    }
}

/**
 * DeleteJobs response structure.
 * @class
 */
class DeleteJobsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Tag.
 * @class
 */
class TagSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Tag value.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.TagValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValue = 'TagValue' in params ? params.TagValue : null;

    }
}

/**
 * AdjustJobSpeed response structure.
 * @class
 */
class AdjustJobSpeedResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Error Summary.
 * @class
 */
class ErrorSummary extends  AbstractModel {
    constructor(){
        super();

        /**
         * Status code.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Result code.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * Number of error occurrences.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Error rate.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Rate = null;

        /**
         * Error message.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Message = null;

        /**
         * Request protocol type.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Proto = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.Rate = 'Rate' in params ? params.Rate : null;
        this.Message = 'Message' in params ? params.Message : null;
        this.Proto = 'Proto' in params ? params.Proto : null;

    }
}

/**
 * CreateProject response structure.
 * @class
 */
class CreateProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSampleQuery request structure.
 * @class
 */
class DescribeSampleQueryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Metric name. For the value range, refer to all metric names returned by the DescribeMetricLabelWithValues API.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * Aggregation function. Range of values: Rate, Count, Avg, P90, P95, P99, Gauge.
         * @type {string || null}
         */
        this.Aggregation = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Label filtering condition. For supported labels, refer to all metrics and labels returned by the DescribeMetricLabelWithValues API.
         * @type {Array.<Label> || null}
         */
        this.Labels = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.Aggregation = 'Aggregation' in params ? params.Aggregation : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

        if (params.Labels) {
            this.Labels = new Array();
            for (let z in params.Labels) {
                let obj = new Label();
                obj.deserialize(params.Labels[z]);
                this.Labels.push(obj);
            }
        }

    }
}

/**
 * DescribeSampleMatrixBatchQuery response structure.
 * @class
 */
class DescribeSampleMatrixBatchQueryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Batch metric matrices.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<CustomSampleMatrix> || null}
         */
        this.MetricSampleMatrixSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MetricSampleMatrixSet) {
            this.MetricSampleMatrixSet = new Array();
            for (let z in params.MetricSampleMatrixSet) {
                let obj = new CustomSampleMatrix();
                obj.deserialize(params.MetricSampleMatrixSet[z]);
                this.MetricSampleMatrixSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteEnvironments response structure.
 * @class
 */
class DeleteEnvironmentsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * SLA label.
 * @class
 */
class SLALabel extends  AbstractModel {
    constructor(){
        super();

        /**
         * Label name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.LabelName = null;

        /**
         * Label value.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.LabelValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.LabelName = 'LabelName' in params ? params.LabelName : null;
        this.LabelValue = 'LabelValue' in params ? params.LabelValue : null;

    }
}

/**
 * Alert history record.
 * @class
 */
class AlertRecord extends  AbstractModel {
    constructor(){
        super();

        /**
         * Alert history record ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.AlertRecordId = null;

        /**
         * Project ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Status.

Note: This field may return null, indicating that no valid value is found.
         * @type {AlertRecordStatus || null}
         */
        this.Status = null;

        /**
         * Create time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Update time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * Job ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * App ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Account uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Sub account uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.SubAccountUin = null;

        /**
         * Scenario name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ScenarioName = null;

        /**
         * Alert target.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Target = null;

        /**
         * SLA ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.JobSLAId = null;

        /**
         * SLA description.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.JobSLADescription = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AlertRecordId = 'AlertRecordId' in params ? params.AlertRecordId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;

        if (params.Status) {
            let obj = new AlertRecordStatus();
            obj.deserialize(params.Status)
            this.Status = obj;
        }
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.SubAccountUin = 'SubAccountUin' in params ? params.SubAccountUin : null;
        this.ScenarioName = 'ScenarioName' in params ? params.ScenarioName : null;
        this.Target = 'Target' in params ? params.Target : null;
        this.JobSLAId = 'JobSLAId' in params ? params.JobSLAId : null;
        this.JobSLADescription = 'JobSLADescription' in params ? params.JobSLADescription : null;

    }
}

/**
 * Load configuration for RPS mode.
 * @class
 */
class RequestsPerSecond extends  AbstractModel {
    constructor(){
        super();

        /**
         * Maximum rps.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.MaxRequestsPerSecond = null;

        /**
         * Duration time.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.DurationSeconds = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.TargetVirtualUsers = null;

        /**
         * Number of resources.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Resources = null;

        /**
         * Initial rps.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.StartRequestsPerSecond = null;

        /**
         * Target rps, invalid as an input parameter.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.TargetRequestsPerSecond = null;

        /**
         * Graceful shutdown waiting time.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.GracefulStopSeconds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MaxRequestsPerSecond = 'MaxRequestsPerSecond' in params ? params.MaxRequestsPerSecond : null;
        this.DurationSeconds = 'DurationSeconds' in params ? params.DurationSeconds : null;
        this.TargetVirtualUsers = 'TargetVirtualUsers' in params ? params.TargetVirtualUsers : null;
        this.Resources = 'Resources' in params ? params.Resources : null;
        this.StartRequestsPerSecond = 'StartRequestsPerSecond' in params ? params.StartRequestsPerSecond : null;
        this.TargetRequestsPerSecond = 'TargetRequestsPerSecond' in params ? params.TargetRequestsPerSecond : null;
        this.GracefulStopSeconds = 'GracefulStopSeconds' in params ? params.GracefulStopSeconds : null;

    }
}

/**
 * DescribeRegions request structure.
 * @class
 */
class DescribeRegionsRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DeleteScenarios response structure.
 * @class
 */
class DeleteScenariosResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateEnvironment request structure.
 * @class
 */
class CreateEnvironmentRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * DescribeErrorSummary request structure.
 * @class
 */
class DescribeErrorSummaryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Filter parameters.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * CopyScenario request structure.
 * @class
 */
class CopyScenarioRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;

    }
}

/**
 * Test dataset.
 * @class
 */
class TestData extends  AbstractModel {
    constructor(){
        super();

        /**
         * File name of the test dataset.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Whether the dataset is sharded.

Note: This field may return null, indicating that no valid value is found.
         * @type {boolean || null}
         */
        this.Split = null;

        /**
         * Whether the first row is parameter name.

Note: This field may return null, indicating that no valid value is found.
         * @type {boolean || null}
         */
        this.HeaderInFile = null;

        /**
         * Array of parameter name.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.HeaderColumns = null;

        /**
         * Number of file lines.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.LineCount = null;

        /**
         * Update time.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * File size.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Size = null;

        /**
         * First few rows of dataset.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.HeadLines = null;

        /**
         * Last few rows of dataset.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.TailLines = null;

        /**
         * File type.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * File ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.FileId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Split = 'Split' in params ? params.Split : null;
        this.HeaderInFile = 'HeaderInFile' in params ? params.HeaderInFile : null;
        this.HeaderColumns = 'HeaderColumns' in params ? params.HeaderColumns : null;
        this.LineCount = 'LineCount' in params ? params.LineCount : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.HeadLines = 'HeadLines' in params ? params.HeadLines : null;
        this.TailLines = 'TailLines' in params ? params.TailLines : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.FileId = 'FileId' in params ? params.FileId : null;

    }
}

/**
 * Sampled request logs.
 * @class
 */
class SampleLog extends  AbstractModel {
    constructor(){
        super();

        /**
         * Millisecond timestamp.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Timestamp = null;

        /**
         * Log attributes.

Note: This field may return null, indicating that no valid value is found.
         * @type {Attributes || null}
         */
        this.Attributes = null;

        /**
         * Request in har format in log.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Body = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Timestamp = 'Timestamp' in params ? params.Timestamp : null;

        if (params.Attributes) {
            let obj = new Attributes();
            obj.deserialize(params.Attributes)
            this.Attributes = obj;
        }
        this.Body = 'Body' in params ? params.Body : null;

    }
}

/**
 * Domain resolution configuration of the pressure machine.
 * @class
 */
class DomainNameConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Domain configuration.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<HostAlias> || null}
         */
        this.HostAliases = null;

        /**
         * DNS configuration.

Note: This field may return null, indicating that no valid value is found.
         * @type {DNSConfig || null}
         */
        this.DNSConfig = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.HostAliases) {
            this.HostAliases = new Array();
            for (let z in params.HostAliases) {
                let obj = new HostAlias();
                obj.deserialize(params.HostAliases[z]);
                this.HostAliases.push(obj);
            }
        }

        if (params.DNSConfig) {
            let obj = new DNSConfig();
            obj.deserialize(params.DNSConfig)
            this.DNSConfig = obj;
        }

    }
}

/**
 * DescribeNormalLogs response structure.
 * @class
 */
class DescribeNormalLogsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Log context, used when loading more logs. Pass through the Context value returned last time to retrieve subsequent log content. The expiration time is 1 hour.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Context = null;

        /**
         * Array of logs.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<NormalLog> || null}
         */
        this.NormalLogs = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Context = 'Context' in params ? params.Context : null;

        if (params.NormalLogs) {
            this.NormalLogs = new Array();
            for (let z in params.NormalLogs) {
                let obj = new NormalLog();
                obj.deserialize(params.NormalLogs[z]);
                this.NormalLogs.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Message notification before and after job.
 * @class
 */
class Notification extends  AbstractModel {
    constructor(){
        super();

        /**
         * Event.
         * @type {Array.<string> || null}
         */
        this.Events = null;

        /**
         * Webhook URL.
         * @type {string || null}
         */
        this.URL = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Events = 'Events' in params ? params.Events : null;
        this.URL = 'URL' in params ? params.URL : null;

    }
}

/**
 * DescribeSampleBatchQuery request structure.
 * @class
 */
class DescribeSampleBatchQueryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Array of queries.
         * @type {Array.<InternalMetricQuery> || null}
         */
        this.Queries = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;

        if (params.Queries) {
            this.Queries = new Array();
            for (let z in params.Queries) {
                let obj = new InternalMetricQuery();
                obj.deserialize(params.Queries[z]);
                this.Queries.push(obj);
            }
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * RestartCronJobs request structure.
 * @class
 */
class RestartCronJobsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Array of cron job ID.
         * @type {Array.<string> || null}
         */
        this.CronJobIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.CronJobIds = 'CronJobIds' in params ? params.CronJobIds : null;

    }
}

/**
 * DeleteScenarios request structure.
 * @class
 */
class DeleteScenariosRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of Scenario ID to be deleted.
         * @type {Array.<string> || null}
         */
        this.ScenarioIds = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Whether to delete scene-related jobs. The default value is false.
         * @type {boolean || null}
         */
        this.DeleteJobs = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScenarioIds = 'ScenarioIds' in params ? params.ScenarioIds : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.DeleteJobs = 'DeleteJobs' in params ? params.DeleteJobs : null;

    }
}

/**
 * CreateAlertChannel response structure.
 * @class
 */
class CreateAlertChannelResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Metric structure.
 * @class
 */
class MetricInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name in backend.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * Metric name displayed in frontend.
         * @type {string || null}
         */
        this.Alias = null;

        /**
         * Metric description.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Metric type.
         * @type {string || null}
         */
        this.MetricType = null;

        /**
         * Default metric unit.
         * @type {string || null}
         */
        this.Unit = null;

        /**
         * Aggregation functions supported by the metric.
         * @type {Array.<AggregationLegend> || null}
         */
        this.Aggregations = null;

        /**
         * Whether it is an internal metric, internal metrics cannot be freely selected by users on the frontend.
         * @type {boolean || null}
         */
        this.InnerMetric = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.Alias = 'Alias' in params ? params.Alias : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.MetricType = 'MetricType' in params ? params.MetricType : null;
        this.Unit = 'Unit' in params ? params.Unit : null;

        if (params.Aggregations) {
            this.Aggregations = new Array();
            for (let z in params.Aggregations) {
                let obj = new AggregationLegend();
                obj.deserialize(params.Aggregations[z]);
                this.Aggregations.push(obj);
            }
        }
        this.InnerMetric = 'InnerMetric' in params ? params.InnerMetric : null;

    }
}

/**
 * CreateAlertChannel request structure.
 * @class
 */
class CreateAlertChannelRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The NoticeId of alarm notification template in the monitor service, can be obtained from the Id field in the response of the DescribeAlarmNotices API of the monitor service's cloud API. (In the input parameters of the CreateAlertChannel API, either AMPConsumerId or NoticeId can be used to identify an alarm notification template.)
         * @type {string || null}
         */
        this.NoticeId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * The AMPConsumerId of alarm notification template for monitor service, can be obtained from the AMPConsumerId field in the response of the DescribeAlarmNotices API of the monitor service's cloud API. (In the input parameters of the CreateAlertChannel API, either AMPConsumerId or Noticeid can be used to identify an alarm notification template.)
         * @type {string || null}
         */
        this.AMPConsumerId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NoticeId = 'NoticeId' in params ? params.NoticeId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.AMPConsumerId = 'AMPConsumerId' in params ? params.AMPConsumerId : null;

    }
}

/**
 * Status of alert history record
 * @class
 */
class AlertRecordStatus extends  AbstractModel {
    constructor(){
        super();

        /**
         * Success or failure of stopping performance test job.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.AbortJob = null;

        /**
         * Success or failure of sending alert notification.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.SendNotice = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.AbortJob = 'AbortJob' in params ? params.AbortJob : null;
        this.SendNotice = 'SendNotice' in params ? params.SendNotice : null;

    }
}

/**
 * DescribeAlertChannels request structure.
 * @class
 */
class DescribeAlertChannelsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of Project ID.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

        /**
         * Offset. Default value is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returns, default is 20, maximum is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Array of Notice ID.
         * @type {Array.<string> || null}
         */
        this.NoticeIds = null;

        /**
         * Column for sorting.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Whether in ascending order.
         * @type {boolean || null}
         */
        this.Ascend = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.NoticeIds = 'NoticeIds' in params ? params.NoticeIds : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.Ascend = 'Ascend' in params ? params.Ascend : null;

    }
}

/**
 * SLA rule.
 * @class
 */
class SLARule extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * Metric aggregation method.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Aggregation = null;

        /**
         * Condition, such as '==' '!=' '<' '<=' '>' '>='.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Condition = null;

        /**
         * Threshold value.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Value = null;

        /**
         * Label.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<SLALabel> || null}
         */
        this.LabelFilter = null;

        /**
         * Whether to stop performance test job.

Note: This field may return null, indicating that no valid value is found.
         * @type {boolean || null}
         */
        this.AbortFlag = null;

        /**
         * Duration.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.For = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.Aggregation = 'Aggregation' in params ? params.Aggregation : null;
        this.Condition = 'Condition' in params ? params.Condition : null;
        this.Value = 'Value' in params ? params.Value : null;

        if (params.LabelFilter) {
            this.LabelFilter = new Array();
            for (let z in params.LabelFilter) {
                let obj = new SLALabel();
                obj.deserialize(params.LabelFilter[z]);
                this.LabelFilter.push(obj);
            }
        }
        this.AbortFlag = 'AbortFlag' in params ? params.AbortFlag : null;
        this.For = 'For' in params ? params.For : null;

    }
}

/**
 * DescribeAvailableMetrics response structure.
 * @class
 */
class DescribeAvailableMetricsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * All supported metrics of the product.
         * @type {Array.<MetricInfo> || null}
         */
        this.MetricSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MetricSet) {
            this.MetricSet = new Array();
            for (let z in params.MetricSet) {
                let obj = new MetricInfo();
                obj.deserialize(params.MetricSet[z]);
                this.MetricSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeMetricLabelWithValues response structure.
 * @class
 */
class DescribeMetricLabelWithValuesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * All labels and values of metrics.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<MetricLabelWithValues> || null}
         */
        this.MetricLabelWithValuesSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MetricLabelWithValuesSet) {
            this.MetricLabelWithValuesSet = new Array();
            for (let z in params.MetricLabelWithValuesSet) {
                let obj = new MetricLabelWithValues();
                obj.deserialize(params.MetricLabelWithValuesSet[z]);
                this.MetricLabelWithValuesSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Basic file information
 * @class
 */
class FileInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filename

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * File size

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Size = null;

        /**
         * File type

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Update time

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * File ID

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.FileId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.FileId = 'FileId' in params ? params.FileId : null;

    }
}

/**
 * Load configuration.
 * @class
 */
class LoadSpec extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration for concurrency mode.

Note: This field may return null, indicating that no valid value is found.
         * @type {Concurrency || null}
         */
        this.Concurrency = null;

        /**
         * Configuration for RPS mode.

Note: This field may return null, indicating that no valid value is found.
         * @type {RequestsPerSecond || null}
         */
        this.RequestsPerSecond = null;

        /**
         * Built-in script mode.

Note: This field may return null, indicating that no valid value is found.
         * @type {ScriptOrigin || null}
         */
        this.ScriptOrigin = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Concurrency) {
            let obj = new Concurrency();
            obj.deserialize(params.Concurrency)
            this.Concurrency = obj;
        }

        if (params.RequestsPerSecond) {
            let obj = new RequestsPerSecond();
            obj.deserialize(params.RequestsPerSecond)
            this.RequestsPerSecond = obj;
        }

        if (params.ScriptOrigin) {
            let obj = new ScriptOrigin();
            obj.deserialize(params.ScriptOrigin)
            this.ScriptOrigin = obj;
        }

    }
}

/**
 * Alert notification channel
 * @class
 */
class AlertChannel extends  AbstractModel {
    constructor(){
        super();

        /**
         * Notification template ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.NoticeId = null;

        /**
         * AMP consumer ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.AMPConsumerId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.NoticeId = 'NoticeId' in params ? params.NoticeId : null;
        this.AMPConsumerId = 'AMPConsumerId' in params ? params.AMPConsumerId : null;

    }
}

/**
 * DescribeEnvironments response structure.
 * @class
 */
class DescribeEnvironmentsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Built-in script load model, not supported currently.
 * @class
 */
class ScriptOrigin extends  AbstractModel {
    constructor(){
        super();

        /**
         * Machine number.
         * @type {number || null}
         */
        this.MachineNumber = null;

        /**
         * Machine specification.
         * @type {string || null}
         */
        this.MachineSpecification = null;

        /**
         * Duration.
         * @type {number || null}
         */
        this.DurationSeconds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MachineNumber = 'MachineNumber' in params ? params.MachineNumber : null;
        this.MachineSpecification = 'MachineSpecification' in params ? params.MachineSpecification : null;
        this.DurationSeconds = 'DurationSeconds' in params ? params.DurationSeconds : null;

    }
}

/**
 * Parameters for querying jobs associated with a specific scenario.
 * @class
 */
class ScenarioRelatedJobsParams extends  AbstractModel {
    constructor(){
        super();

        /**
         * Offset, default value is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returns. Default value is 20, maximum is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Field for sorting.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Whether in ascending order.
         * @type {boolean || null}
         */
        this.Ascend = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.Ascend = 'Ascend' in params ? params.Ascend : null;

    }
}

/**
 * COS temporary credentials.
 * @class
 */
class Credentials extends  AbstractModel {
    constructor(){
        super();

        /**
         * Temporary secret ID.
         * @type {string || null}
         */
        this.TmpSecretId = null;

        /**
         * Temporary secret key.
         * @type {string || null}
         */
        this.TmpSecretKey = null;

        /**
         * Temporary token.
         * @type {string || null}
         */
        this.Token = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TmpSecretId = 'TmpSecretId' in params ? params.TmpSecretId : null;
        this.TmpSecretKey = 'TmpSecretKey' in params ? params.TmpSecretKey : null;
        this.Token = 'Token' in params ? params.Token : null;

    }
}

/**
 * DescribeAlertChannels response structure.
 * @class
 */
class DescribeAlertChannelsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Alarm recipient groups list.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<AlertChannelRecord> || null}
         */
        this.AlertChannelSet = null;

        /**
         * Number of alarm recipient groups.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AlertChannelSet) {
            this.AlertChannelSet = new Array();
            for (let z in params.AlertChannelSet) {
                let obj = new AlertChannelRecord();
                obj.deserialize(params.AlertChannelSet[z]);
                this.AlertChannelSet.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateCronJob request structure.
 * @class
 */
class CreateCronJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Scenario name.
         * @type {string || null}
         */
        this.ScenarioName = null;

        /**
         * Execution frequency type: 1, execute once only; 2, Daily; 3, Weekly; 4, Advanced mode using cron expression.
         * @type {number || null}
         */
        this.FrequencyType = null;

        /**
         * Cron expression.
         * @type {string || null}
         */
        this.CronExpression = null;

        /**
         * Cron job initiator.
         * @type {string || null}
         */
        this.JobOwner = null;

        /**
         * End time.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Notice ID.
         * @type {string || null}
         */
        this.NoticeId = null;

        /**
         * Note.
         * @type {string || null}
         */
        this.Note = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.ScenarioName = 'ScenarioName' in params ? params.ScenarioName : null;
        this.FrequencyType = 'FrequencyType' in params ? params.FrequencyType : null;
        this.CronExpression = 'CronExpression' in params ? params.CronExpression : null;
        this.JobOwner = 'JobOwner' in params ? params.JobOwner : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.NoticeId = 'NoticeId' in params ? params.NoticeId : null;
        this.Note = 'Note' in params ? params.Note : null;

    }
}

/**
 * UpdateJob response structure.
 * @class
 */
class UpdateJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCheckSummary request structure.
 * @class
 */
class DescribeCheckSummaryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * Metric query filter.
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Equals: 0, not equals: 1.
         * @type {number || null}
         */
        this.Operator = null;

        /**
         * Tag name, optional values include:
1. method, request method name;
2. proto: protocol name;
3. service: service name;
4. status: response status code;
5.result: response details
6.check: check name.
         * @type {string || null}
         */
        this.LabelName = null;

        /**
         * Tag value, optional values include:
1.method: request method name, for example, GET, POST, PUT, etc.
2.proto: protocol name, for example, HTTP/1.1, HTTP/2, etc.
3.service: service name, for example, the request URL such as http://httpbin.org/get
4.status: response status code, for example, 200, 404, 500, etc.
5.result: response details, used to determine whether the request was successful or failed; if successful, the result Tag value is ok; if failed, the result Tag carries an error code and description.
6.check: check name, the Tag value is the checkpoint name set by the user.
         * @type {string || null}
         */
        this.LabelValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Operator = 'Operator' in params ? params.Operator : null;
        this.LabelName = 'LabelName' in params ? params.LabelName : null;
        this.LabelValue = 'LabelValue' in params ? params.LabelValue : null;

    }
}

/**
 * DeleteFiles response structure.
 * @class
 */
class DeleteFilesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Aggregation function
 * @class
 */
class AggregationLegend extends  AbstractModel {
    constructor(){
        super();

        /**
         * Aggregation functions supported by the metric.
         * @type {string || null}
         */
        this.Aggregation = null;

        /**
         * Description after the aggregation function is applied to the metric.
         * @type {string || null}
         */
        this.Legend = null;

        /**
         * Metric unit after aggregation.
         * @type {string || null}
         */
        this.Unit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Aggregation = 'Aggregation' in params ? params.Aggregation : null;
        this.Legend = 'Legend' in params ? params.Legend : null;
        this.Unit = 'Unit' in params ? params.Unit : null;

    }
}

/**
 * Performance test host source.
 * @class
 */
class LoadSource extends  AbstractModel {
    constructor(){
        super();

        /**
         * Pressure machine IP.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.IP = null;

        /**
         * Pressure machine pod.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.PodName = null;

        /**
         * Region.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Region = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IP = 'IP' in params ? params.IP : null;
        this.PodName = 'PodName' in params ? params.PodName : null;
        this.Region = 'Region' in params ? params.Region : null;

    }
}

/**
 * Metric matrix, which contains multiple metric sequence arrays.
 * @class
 */
class CustomSampleMatrix extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name.
         * @type {string || null}
         */
        this.Metric = null;

        /**
         * Aggregation function.
         * @type {string || null}
         */
        this.Aggregation = null;

        /**
         * Metric unit.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Unit = null;

        /**
         * Metric sequence array.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<SampleStream> || null}
         */
        this.Streams = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Metric = 'Metric' in params ? params.Metric : null;
        this.Aggregation = 'Aggregation' in params ? params.Aggregation : null;
        this.Unit = 'Unit' in params ? params.Unit : null;

        if (params.Streams) {
            this.Streams = new Array();
            for (let z in params.Streams) {
                let obj = new SampleStream();
                obj.deserialize(params.Streams[z]);
                this.Streams.push(obj);
            }
        }

    }
}

/**
 * Load configuration.
 * @class
 */
class Load extends  AbstractModel {
    constructor(){
        super();

        /**
         * Load configuration.

Note: This field may return null, indicating that no valid value is found.
         * @type {LoadSpec || null}
         */
        this.LoadSpec = null;

        /**
         * Stress source from vpc.

Note: This field may return null, indicating that no valid value is found.
         * @type {VpcLoadDistribution || null}
         */
        this.VpcLoadDistribution = null;

        /**
         * Multi-region stress distribution.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<GeoRegionsLoadItem> || null}
         */
        this.GeoRegionsLoadDistribution = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.LoadSpec) {
            let obj = new LoadSpec();
            obj.deserialize(params.LoadSpec)
            this.LoadSpec = obj;
        }

        if (params.VpcLoadDistribution) {
            let obj = new VpcLoadDistribution();
            obj.deserialize(params.VpcLoadDistribution)
            this.VpcLoadDistribution = obj;
        }

        if (params.GeoRegionsLoadDistribution) {
            this.GeoRegionsLoadDistribution = new Array();
            for (let z in params.GeoRegionsLoadDistribution) {
                let obj = new GeoRegionsLoadItem();
                obj.deserialize(params.GeoRegionsLoadDistribution[z]);
                this.GeoRegionsLoadDistribution.push(obj);
            }
        }

    }
}

/**
 * CreateFile request structure.
 * @class
 */
class CreateFileRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * File ID. Its value should be the corresponding directory of the file in the COS bucket after it has been uploaded in the previous step.
         * @type {string || null}
         */
        this.FileId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * File type. 1 represents parameter file, 2 represents protocol file, 3 represents request file.
         * @type {number || null}
         */
        this.Kind = null;

        /**
         * Filename.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * File size.
         * @type {number || null}
         */
        this.Size = null;

        /**
         * File type. The 'folder' represents a folder; if not specified, it represents a file.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Number of Rows.
         * @type {number || null}
         */
        this.LineCount = null;

        /**
         * First few rows of file.
         * @type {Array.<string> || null}
         */
        this.HeadLines = null;

        /**
         * Last few rows of file.
         * @type {Array.<string> || null}
         */
        this.TailLines = null;

        /**
         * Whether the header is in the file.
         * @type {boolean || null}
         */
        this.HeaderInFile = null;

        /**
         * Header.
         * @type {Array.<string> || null}
         */
        this.HeaderColumns = null;

        /**
         * Files in the folder.
         * @type {Array.<FileInfo> || null}
         */
        this.FileInfos = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.FileId = 'FileId' in params ? params.FileId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Kind = 'Kind' in params ? params.Kind : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Size = 'Size' in params ? params.Size : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.LineCount = 'LineCount' in params ? params.LineCount : null;
        this.HeadLines = 'HeadLines' in params ? params.HeadLines : null;
        this.TailLines = 'TailLines' in params ? params.TailLines : null;
        this.HeaderInFile = 'HeaderInFile' in params ? params.HeaderInFile : null;
        this.HeaderColumns = 'HeaderColumns' in params ? params.HeaderColumns : null;

        if (params.FileInfos) {
            this.FileInfos = new Array();
            for (let z in params.FileInfos) {
                let obj = new FileInfo();
                obj.deserialize(params.FileInfos[z]);
                this.FileInfos.push(obj);
            }
        }

    }
}

/**
 * Request details in performance test.
 * @class
 */
class RequestSummary extends  AbstractModel {
    constructor(){
        super();

        /**
         * Request URL.
         * @type {string || null}
         */
        this.Service = null;

        /**
         * Request method.
         * @type {string || null}
         */
        this.Method = null;

        /**
         * Number of requests.
         * @type {number || null}
         */
        this.Count = null;

        /**
         * Average request response time (seconds).
         * @type {number || null}
         */
        this.Average = null;

        /**
         * Request p90 latency (seconds).
         * @type {number || null}
         */
        this.P90 = null;

        /**
         * Request p95 latency (seconds).
         * @type {number || null}
         */
        this.P95 = null;

        /**
         * Minimum request latency (seconds).
         * @type {number || null}
         */
        this.Min = null;

        /**
         * Maximum request latency (seconds).
         * @type {number || null}
         */
        this.Max = null;

        /**
         * Request error rate.
         * @type {number || null}
         */
        this.ErrorPercentage = null;

        /**
         * Request p99 latency (seconds).
         * @type {number || null}
         */
        this.P99 = null;

        /**
         * Response status code.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Response details.
         * @type {string || null}
         */
        this.Result = null;

        /**
         * Request per seconds, unit req/s.
         * @type {number || null}
         */
        this.RPS = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Service = 'Service' in params ? params.Service : null;
        this.Method = 'Method' in params ? params.Method : null;
        this.Count = 'Count' in params ? params.Count : null;
        this.Average = 'Average' in params ? params.Average : null;
        this.P90 = 'P90' in params ? params.P90 : null;
        this.P95 = 'P95' in params ? params.P95 : null;
        this.Min = 'Min' in params ? params.Min : null;
        this.Max = 'Max' in params ? params.Max : null;
        this.ErrorPercentage = 'ErrorPercentage' in params ? params.ErrorPercentage : null;
        this.P99 = 'P99' in params ? params.P99 : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.Result = 'Result' in params ? params.Result : null;
        this.RPS = 'RPS' in params ? params.RPS : null;

    }
}

/**
 * DeleteCronJobs request structure.
 * @class
 */
class DeleteCronJobsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Array of CronJob ID.
         * @type {Array.<string> || null}
         */
        this.CronJobIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.CronJobIds = 'CronJobIds' in params ? params.CronJobIds : null;

    }
}

/**
 * DescribeSampleLogs response structure.
 * @class
 */
class DescribeSampleLogsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of logs.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Log context, used when loading more logs. Pass through the Context value returned last time to retrieve subsequent log content. The expiration time is 1 hour.
Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Context = null;

        /**
         * Array of request logs.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<SampleLog> || null}
         */
        this.SampleLogs = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.Context = 'Context' in params ? params.Context : null;

        if (params.SampleLogs) {
            this.SampleLogs = new Array();
            for (let z in params.SampleLogs) {
                let obj = new SampleLog();
                obj.deserialize(params.SampleLogs[z]);
                this.SampleLogs.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeCronJobs response structure.
 * @class
 */
class DescribeCronJobsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number of cron jobs.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Cron jobs.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<CronJob> || null}
         */
        this.CronJobSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;

        if (params.CronJobSet) {
            this.CronJobSet = new Array();
            for (let z in params.CronJobSet) {
                let obj = new CronJob();
                obj.deserialize(params.CronJobSet[z]);
                this.CronJobSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeNormalLogs request structure.
 * @class
 */
class DescribeNormalLogsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Context is used when loading more logs. Pass through the Context value returned last time to retrieve subsequent log content. The expiration time is 1 hour.
         * @type {string || null}
         */
        this.Context = null;

        /**
         * Log start time.
         * @type {string || null}
         */
        this.From = null;

        /**
         * Log end time.
         * @type {string || null}
         */
        this.To = null;

        /**
         * Log level, valid values are debug, info, error.
         * @type {string || null}
         */
        this.SeverityText = null;

        /**
         * IP of pressure engine instance.
         * @type {string || null}
         */
        this.Instance = null;

        /**
         * Region of pressure engine instance, such as ap-shanghai, ap-guangzhou.
         * @type {string || null}
         */
        this.InstanceRegion = null;

        /**
         * Type of log, in which 'console' represents user output, 'engine' represents engine output.
         * @type {string || null}
         */
        this.LogType = null;

        /**
         * Number of returned logs, maximum 100.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.Context = 'Context' in params ? params.Context : null;
        this.From = 'From' in params ? params.From : null;
        this.To = 'To' in params ? params.To : null;
        this.SeverityText = 'SeverityText' in params ? params.SeverityText : null;
        this.Instance = 'Instance' in params ? params.Instance : null;
        this.InstanceRegion = 'InstanceRegion' in params ? params.InstanceRegion : null;
        this.LogType = 'LogType' in params ? params.LogType : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeJobs request structure.
 * @class
 */
class DescribeJobsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of Scenario ID.
         * @type {Array.<string> || null}
         */
        this.ScenarioIds = null;

        /**
         * Array of Project ID.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

        /**
         * Offset. Default value is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returns. Default value is 20, maximum is 100
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Array of Job ID.
         * @type {Array.<string> || null}
         */
        this.JobIds = null;

        /**
         * Column for sorting.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Whether in ascending order.
         * @type {boolean || null}
         */
        this.Ascend = null;

        /**
         * Start time of the job.
         * @type {string || null}
         */
        this.StartTime = null;

        /**
         * End time of the job.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Whether debug jobs.
         * @type {boolean || null}
         */
        this.Debug = null;

        /**
         * Job status.
         * @type {Array.<number> || null}
         */
        this.Status = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScenarioIds = 'ScenarioIds' in params ? params.ScenarioIds : null;
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.JobIds = 'JobIds' in params ? params.JobIds : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.Ascend = 'Ascend' in params ? params.Ascend : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.Debug = 'Debug' in params ? params.Debug : null;
        this.Status = 'Status' in params ? params.Status : null;

    }
}

/**
 * DescribeFiles request structure.
 * @class
 */
class DescribeFilesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of Project ID.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

        /**
         * Array of File ID.
         * @type {Array.<string> || null}
         */
        this.FileIds = null;

        /**
         * Filename
         * @type {string || null}
         */
        this.FileName = null;

        /**
         * Offset. Default value is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returns. Default value is 20, maximum is 100
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * File type. 1 represents parameter file, 2 represents protocol file, 3 represents request file.
         * @type {number || null}
         */
        this.Kind = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;
        this.FileIds = 'FileIds' in params ? params.FileIds : null;
        this.FileName = 'FileName' in params ? params.FileName : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Kind = 'Kind' in params ? params.Kind : null;

    }
}

/**
 * AbortCronJobs request structure.
 * @class
 */
class AbortCronJobsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Array of CronJob ID.
         * @type {Array.<string> || null}
         */
        this.CronJobIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.CronJobIds = 'CronJobIds' in params ? params.CronJobIds : null;

    }
}

/**
 * DescribeSampleMatrixBatchQuery request structure.
 * @class
 */
class DescribeSampleMatrixBatchQueryRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Query statement.
         * @type {Array.<InternalMetricQuery> || null}
         */
        this.Queries = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;

        if (params.Queries) {
            this.Queries = new Array();
            for (let z in params.Queries) {
                let obj = new InternalMetricQuery();
                obj.deserialize(params.Queries[z]);
                this.Queries.push(obj);
            }
        }

    }
}

/**
 * DescribeAlertRecords response structure.
 * @class
 */
class DescribeAlertRecordsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Alert records list.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<AlertRecord> || null}
         */
        this.AlertRecordSet = null;

        /**
         * Total number of Alert records.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.AlertRecordSet) {
            this.AlertRecordSet = new Array();
            for (let z in params.AlertRecordSet) {
                let obj = new AlertRecord();
                obj.deserialize(params.AlertRecordSet[z]);
                this.AlertRecordSet.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeProjects request structure.
 * @class
 */
class DescribeProjectsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Offset. Default value is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returns. Default value is 20, maximum is 100
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Array of Project ID.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

        /**
         * Project name.
         * @type {string || null}
         */
        this.ProjectName = null;

        /**
         * Column for sorting.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Whether in ascending order.
         * @type {boolean || null}
         */
        this.Ascend = null;

        /**
         * Array of Tags.
         * @type {Array.<TagSpec> || null}
         */
        this.TagFilters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;
        this.ProjectName = 'ProjectName' in params ? params.ProjectName : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.Ascend = 'Ascend' in params ? params.Ascend : null;

        if (params.TagFilters) {
            this.TagFilters = new Array();
            for (let z in params.TagFilters) {
                let obj = new TagSpec();
                obj.deserialize(params.TagFilters[z]);
                this.TagFilters.push(obj);
            }
        }

    }
}

/**
 * DescribeSampleQuery response structure.
 * @class
 */
class DescribeSampleQueryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned metric.

Note: This field may return null, indicating that no valid value is found.
         * @type {CustomSample || null}
         */
        this.MetricSample = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MetricSample) {
            let obj = new CustomSample();
            obj.deserialize(params.MetricSample)
            this.MetricSample = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteEnvironments request structure.
 * @class
 */
class DeleteEnvironmentsRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * CreateScenario request structure.
 * @class
 */
class CreateScenarioRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scenario Name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Mode type of scenario. Valid values: 'pts-http' represents the simple mode, 'pts-js' represents the script mode, 'pts-jmeter' represents the JMeter mode.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Load configuration.
         * @type {Load || null}
         */
        this.Load = null;

        /**
         * Deprecated.
         * @type {Array.<string> || null}
         */
        this.Configs = null;

        /**
         * Test datasets.
         * @type {Array.<TestData> || null}
         */
        this.Datasets = null;

        /**
         * Deprecated.
         * @type {Array.<string> || null}
         */
        this.Extensions = null;

        /**
         * Deprecated.
         * @type {string || null}
         */
        this.SLAId = null;

        /**
         * Cron job ID.
         * @type {string || null}
         */
        this.CronId = null;

        /**
         * Deprecated,
         * @type {Array.<string> || null}
         */
        this.Scripts = null;

        /**
         * Test scripts.
         * @type {Array.<ScriptInfo> || null}
         */
        this.TestScripts = null;

        /**
         * Protocol files.
         * @type {Array.<ProtocolInfo> || null}
         */
        this.Protocols = null;

        /**
         * Request files.
         * @type {Array.<FileInfo> || null}
         */
        this.RequestFiles = null;

        /**
         * SLA policy.
         * @type {SLAPolicy || null}
         */
        this.SLAPolicy = null;

        /**
         * Extension plugin files.
         * @type {Array.<FileInfo> || null}
         */
        this.Plugins = null;

        /**
         * Domain name resolution configuration.
         * @type {DomainNameConfig || null}
         */
        this.DomainNameConfig = null;

        /**
         * Creator name.
         * @type {string || null}
         */
        this.Owner = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Description = 'Description' in params ? params.Description : null;

        if (params.Load) {
            let obj = new Load();
            obj.deserialize(params.Load)
            this.Load = obj;
        }
        this.Configs = 'Configs' in params ? params.Configs : null;

        if (params.Datasets) {
            this.Datasets = new Array();
            for (let z in params.Datasets) {
                let obj = new TestData();
                obj.deserialize(params.Datasets[z]);
                this.Datasets.push(obj);
            }
        }
        this.Extensions = 'Extensions' in params ? params.Extensions : null;
        this.SLAId = 'SLAId' in params ? params.SLAId : null;
        this.CronId = 'CronId' in params ? params.CronId : null;
        this.Scripts = 'Scripts' in params ? params.Scripts : null;

        if (params.TestScripts) {
            this.TestScripts = new Array();
            for (let z in params.TestScripts) {
                let obj = new ScriptInfo();
                obj.deserialize(params.TestScripts[z]);
                this.TestScripts.push(obj);
            }
        }

        if (params.Protocols) {
            this.Protocols = new Array();
            for (let z in params.Protocols) {
                let obj = new ProtocolInfo();
                obj.deserialize(params.Protocols[z]);
                this.Protocols.push(obj);
            }
        }

        if (params.RequestFiles) {
            this.RequestFiles = new Array();
            for (let z in params.RequestFiles) {
                let obj = new FileInfo();
                obj.deserialize(params.RequestFiles[z]);
                this.RequestFiles.push(obj);
            }
        }

        if (params.SLAPolicy) {
            let obj = new SLAPolicy();
            obj.deserialize(params.SLAPolicy)
            this.SLAPolicy = obj;
        }

        if (params.Plugins) {
            this.Plugins = new Array();
            for (let z in params.Plugins) {
                let obj = new FileInfo();
                obj.deserialize(params.Plugins[z]);
                this.Plugins.push(obj);
            }
        }

        if (params.DomainNameConfig) {
            let obj = new DomainNameConfig();
            obj.deserialize(params.DomainNameConfig)
            this.DomainNameConfig = obj;
        }
        this.Owner = 'Owner' in params ? params.Owner : null;

    }
}

/**
 * DescribeMetricLabelWithValues request structure.
 * @class
 */
class DescribeMetricLabelWithValuesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;

    }
}

/**
 * Performance test scenario.
 * @class
 */
class Scenario extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Scenario name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Scenario description.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Type of scenario. Valid values: 'pts-http' represents the simple mode, 'pts-js' represents the script mode, 'pts-jmeter' represents the JMeter mode.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Scenario status.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Load configuration.

Note: This field may return null, indicating that no valid value is found.
         * @type {Load || null}
         */
        this.Load = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.EncodedScripts = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.Configs = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.Extensions = null;

        /**
         * Test datasets.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<TestData> || null}
         */
        this.Datasets = null;

        /**
         * Deprecated.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.SLAId = null;

        /**
         * CronJob ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.CronId = null;

        /**
         * Create time.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Update time.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * Project ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * App ID.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.AppId = null;

        /**
         * Uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Uin = null;

        /**
         * Sub account uin.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.SubAccountUin = null;

        /**
         * Test scripts.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<ScriptInfo> || null}
         */
        this.TestScripts = null;

        /**
         * Protocol files.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<ProtocolInfo> || null}
         */
        this.Protocols = null;

        /**
         * Request files.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<FileInfo> || null}
         */
        this.RequestFiles = null;

        /**
         * SLA policy.

Note: This field may return null, indicating that no valid value is found.
         * @type {SLAPolicy || null}
         */
        this.SLAPolicy = null;

        /**
         * Extension plugin files.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<FileInfo> || null}
         */
        this.Plugins = null;

        /**
         * Domain name resolution configuration.

Note: This field may return null, indicating that no valid value is found.
         * @type {DomainNameConfig || null}
         */
        this.DomainNameConfig = null;

        /**
         * Notification event hooks.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<NotificationHook> || null}
         */
        this.NotificationHooks = null;

        /**
         * Creator name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Owner = null;

        /**
         * Project name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.ProjectName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Status = 'Status' in params ? params.Status : null;

        if (params.Load) {
            let obj = new Load();
            obj.deserialize(params.Load)
            this.Load = obj;
        }
        this.EncodedScripts = 'EncodedScripts' in params ? params.EncodedScripts : null;
        this.Configs = 'Configs' in params ? params.Configs : null;
        this.Extensions = 'Extensions' in params ? params.Extensions : null;

        if (params.Datasets) {
            this.Datasets = new Array();
            for (let z in params.Datasets) {
                let obj = new TestData();
                obj.deserialize(params.Datasets[z]);
                this.Datasets.push(obj);
            }
        }
        this.SLAId = 'SLAId' in params ? params.SLAId : null;
        this.CronId = 'CronId' in params ? params.CronId : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.Uin = 'Uin' in params ? params.Uin : null;
        this.SubAccountUin = 'SubAccountUin' in params ? params.SubAccountUin : null;

        if (params.TestScripts) {
            this.TestScripts = new Array();
            for (let z in params.TestScripts) {
                let obj = new ScriptInfo();
                obj.deserialize(params.TestScripts[z]);
                this.TestScripts.push(obj);
            }
        }

        if (params.Protocols) {
            this.Protocols = new Array();
            for (let z in params.Protocols) {
                let obj = new ProtocolInfo();
                obj.deserialize(params.Protocols[z]);
                this.Protocols.push(obj);
            }
        }

        if (params.RequestFiles) {
            this.RequestFiles = new Array();
            for (let z in params.RequestFiles) {
                let obj = new FileInfo();
                obj.deserialize(params.RequestFiles[z]);
                this.RequestFiles.push(obj);
            }
        }

        if (params.SLAPolicy) {
            let obj = new SLAPolicy();
            obj.deserialize(params.SLAPolicy)
            this.SLAPolicy = obj;
        }

        if (params.Plugins) {
            this.Plugins = new Array();
            for (let z in params.Plugins) {
                let obj = new FileInfo();
                obj.deserialize(params.Plugins[z]);
                this.Plugins.push(obj);
            }
        }

        if (params.DomainNameConfig) {
            let obj = new DomainNameConfig();
            obj.deserialize(params.DomainNameConfig)
            this.DomainNameConfig = obj;
        }

        if (params.NotificationHooks) {
            this.NotificationHooks = new Array();
            for (let z in params.NotificationHooks) {
                let obj = new NotificationHook();
                obj.deserialize(params.NotificationHooks[z]);
                this.NotificationHooks.push(obj);
            }
        }
        this.Owner = 'Owner' in params ? params.Owner : null;
        this.ProjectName = 'ProjectName' in params ? params.ProjectName : null;

    }
}

/**
 * DescribeProjects response structure.
 * @class
 */
class DescribeProjectsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project list.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<Project> || null}
         */
        this.ProjectSet = null;

        /**
         * Total number of projects.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ProjectSet) {
            this.ProjectSet = new Array();
            for (let z in params.ProjectSet) {
                let obj = new Project();
                obj.deserialize(params.ProjectSet[z]);
                this.ProjectSet.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateCronJob request structure.
 * @class
 */
class UpdateCronJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Cron job ID.
         * @type {string || null}
         */
        this.CronJobId = null;

        /**
         * Note.
         * @type {string || null}
         */
        this.Note = null;

        /**
         * Cron expression.
         * @type {string || null}
         */
        this.CronExpression = null;

        /**
         * Execution frequency type: 1, execute once only; 2, Daily; 3, Weekly; 4, Advanced mode using cron expression.
         * @type {number || null}
         */
        this.FrequencyType = null;

        /**
         * Cron job Name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Scenario name.
         * @type {string || null}
         */
        this.ScenarioName = null;

        /**
         * Cron job Initiator.
         * @type {string || null}
         */
        this.JobOwner = null;

        /**
         * End time.
         * @type {string || null}
         */
        this.EndTime = null;

        /**
         * Notice ID.
         * @type {string || null}
         */
        this.NoticeId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.CronJobId = 'CronJobId' in params ? params.CronJobId : null;
        this.Note = 'Note' in params ? params.Note : null;
        this.CronExpression = 'CronExpression' in params ? params.CronExpression : null;
        this.FrequencyType = 'FrequencyType' in params ? params.FrequencyType : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.ScenarioName = 'ScenarioName' in params ? params.ScenarioName : null;
        this.JobOwner = 'JobOwner' in params ? params.JobOwner : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.NoticeId = 'NoticeId' in params ? params.NoticeId : null;

    }
}

/**
 * Region.
 * @class
 */
class RegionDetail extends  AbstractModel {
    constructor(){
        super();

        /**
         * Region code.
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Region ID.
         * @type {number || null}
         */
        this.RegionId = null;

        /**
         * Area where the region is located.
         * @type {string || null}
         */
        this.Area = null;

        /**
         * Region name.
         * @type {string || null}
         */
        this.RegionName = null;

        /**
         * Region state.
         * @type {number || null}
         */
        this.RegionState = null;

        /**
         * Region abbreviation.
         * @type {string || null}
         */
        this.RegionShortName = null;

        /**
         * Create time.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Update time.
         * @type {string || null}
         */
        this.UpdatedAt = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Region = 'Region' in params ? params.Region : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.Area = 'Area' in params ? params.Area : null;
        this.RegionName = 'RegionName' in params ? params.RegionName : null;
        this.RegionState = 'RegionState' in params ? params.RegionState : null;
        this.RegionShortName = 'RegionShortName' in params ? params.RegionShortName : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;

    }
}

/**
 * Stream of values belonging to a metric.
 * @class
 */
class SampleStream extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric labels.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<Label> || null}
         */
        this.Labels = null;

        /**
         * Array of metric values.
         * @type {Array.<SamplePair> || null}
         */
        this.Values = null;

        /**
         * Metric name.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.Name = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Labels) {
            this.Labels = new Array();
            for (let z in params.Labels) {
                let obj = new Label();
                obj.deserialize(params.Labels[z]);
                this.Labels.push(obj);
            }
        }

        if (params.Values) {
            this.Values = new Array();
            for (let z in params.Values) {
                let obj = new SamplePair();
                obj.deserialize(params.Values[z]);
                this.Values.push(obj);
            }
        }
        this.Name = 'Name' in params ? params.Name : null;

    }
}

/**
 * DescribeCheckSummary response structure.
 * @class
 */
class DescribeCheckSummaryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Checkpoint summary information.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<CheckSummary> || null}
         */
        this.CheckSummarySet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.CheckSummarySet) {
            this.CheckSummarySet = new Array();
            for (let z in params.CheckSummarySet) {
                let obj = new CheckSummary();
                obj.deserialize(params.CheckSummarySet[z]);
                this.CheckSummarySet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeScenarios request structure.
 * @class
 */
class DescribeScenariosRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of Scenario ID.
         * @type {Array.<string> || null}
         */
        this.ScenarioIds = null;

        /**
         * Scenario Name.
         * @type {string || null}
         */
        this.ScenarioName = null;

        /**
         * Array of Scenario status.
         * @type {Array.<number> || null}
         */
        this.ScenarioStatus = null;

        /**
         * Offset. Default value is 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Number of returns. Default value is 20, maximum is 100.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Column for sorting.
         * @type {string || null}
         */
        this.OrderBy = null;

        /**
         * Whether in ascending order.
         * @type {boolean || null}
         */
        this.Ascend = null;

        /**
         * Array of Project ID.
         * @type {Array.<string> || null}
         */
        this.ProjectIds = null;

        /**
         * Scenario type, such as pts-http, pts-js, pts-jmeter.
         * @type {string || null}
         */
        this.ScenarioType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScenarioIds = 'ScenarioIds' in params ? params.ScenarioIds : null;
        this.ScenarioName = 'ScenarioName' in params ? params.ScenarioName : null;
        this.ScenarioStatus = 'ScenarioStatus' in params ? params.ScenarioStatus : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.OrderBy = 'OrderBy' in params ? params.OrderBy : null;
        this.Ascend = 'Ascend' in params ? params.Ascend : null;
        this.ProjectIds = 'ProjectIds' in params ? params.ProjectIds : null;
        this.ScenarioType = 'ScenarioType' in params ? params.ScenarioType : null;

    }
}

/**
 * DescribeScenarios response structure.
 * @class
 */
class DescribeScenariosResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scenario list.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<Scenario> || null}
         */
        this.ScenarioSet = null;

        /**
         * Total number of scenarios.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ScenarioSet) {
            this.ScenarioSet = new Array();
            for (let z in params.ScenarioSet) {
                let obj = new Scenario();
                obj.deserialize(params.ScenarioSet[z]);
                this.ScenarioSet.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateScenario response structure.
 * @class
 */
class CreateScenarioResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * AbortJob request structure.
 * @class
 */
class AbortJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Reason for stopping.
         * @type {number || null}
         */
        this.AbortReason = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.AbortReason = 'AbortReason' in params ? params.AbortReason : null;

    }
}

/**
 * DeleteFiles request structure.
 * @class
 */
class DeleteFilesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Array of File ID to be deleted.
         * @type {Array.<string> || null}
         */
        this.FileIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.FileIds = 'FileIds' in params ? params.FileIds : null;

    }
}

/**
 * Checkpoint summary results
 * @class
 */
class CheckSummary extends  AbstractModel {
    constructor(){
        super();

        /**
         * Checkpoint name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Step name of the checkpoint.
         * @type {string || null}
         */
        this.Step = null;

        /**
         * Number of successful checks.
         * @type {number || null}
         */
        this.SuccessCount = null;

        /**
         * Number of failed checks.
         * @type {number || null}
         */
        this.FailCount = null;

        /**
         * Error ratio.
         * @type {number || null}
         */
        this.ErrorRate = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Step = 'Step' in params ? params.Step : null;
        this.SuccessCount = 'SuccessCount' in params ? params.SuccessCount : null;
        this.FailCount = 'FailCount' in params ? params.FailCount : null;
        this.ErrorRate = 'ErrorRate' in params ? params.ErrorRate : null;

    }
}

/**
 * Event notification callback.
 * @class
 */
class NotificationHook extends  AbstractModel {
    constructor(){
        super();

        /**
         * Event.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<string> || null}
         */
        this.Events = null;

        /**
         * Callback URL.

Note: This field may return null, indicating that no valid value is found.
         * @type {string || null}
         */
        this.URL = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Events = 'Events' in params ? params.Events : null;
        this.URL = 'URL' in params ? params.URL : null;

    }
}

/**
 * DescribeJobs response structure.
 * @class
 */
class DescribeJobsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job list.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<Job> || null}
         */
        this.JobSet = null;

        /**
         * Total number of Jobs.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.JobSet) {
            this.JobSet = new Array();
            for (let z in params.JobSet) {
                let obj = new Job();
                obj.deserialize(params.JobSet[z]);
                this.JobSet.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * GenerateTmpKey request structure.
 * @class
 */
class GenerateTmpKeyRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;

    }
}

/**
 * DescribeSampleBatchQuery response structure.
 * @class
 */
class DescribeSampleBatchQueryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Returned metric content.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<CustomSample> || null}
         */
        this.MetricSampleSet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.MetricSampleSet) {
            this.MetricSampleSet = new Array();
            for (let z in params.MetricSampleSet) {
                let obj = new CustomSample();
                obj.deserialize(params.MetricSampleSet[z]);
                this.MetricSampleSet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StartJob response structure.
 * @class
 */
class StartJobResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Job ID.
         * @type {string || null}
         */
        this.JobId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.JobId = 'JobId' in params ? params.JobId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateScenario request structure.
 * @class
 */
class UpdateScenarioRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Scenario name. When calling this API, please include the fields in the Scenario that do not need to be modified as part of the API parameters, otherwise the scenario may become unusable.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Scenario description.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Mode type of scenario. Valid values: 'pts-http' represents the simple mode, 'pts-js' represents the script mode, 'pts-jmeter' represents the JMeter mode.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Load configuration.
         * @type {Load || null}
         */
        this.Load = null;

        /**
         * Deprecated.
         * @type {string || null}
         */
        this.EncodedScripts = null;

        /**
         * Deprecated.
         * @type {Array.<string> || null}
         */
        this.Configs = null;

        /**
         * Test datasets.
         * @type {Array.<TestData> || null}
         */
        this.Datasets = null;

        /**
         * Deprecated.
         * @type {Array.<string> || null}
         */
        this.Extensions = null;

        /**
         * SLA rule ID.
         * @type {string || null}
         */
        this.SLAId = null;

        /**
         * Cron job ID.
         * @type {string || null}
         */
        this.CronId = null;

        /**
         * Scenario status (Note: This parameter is no longer required).
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Test scripts.
         * @type {Array.<ScriptInfo> || null}
         */
        this.TestScripts = null;

        /**
         * Protocol.
         * @type {Array.<ProtocolInfo> || null}
         */
        this.Protocols = null;

        /**
         * Request files.
         * @type {Array.<FileInfo> || null}
         */
        this.RequestFiles = null;

        /**
         * SLA policy.
         * @type {SLAPolicy || null}
         */
        this.SLAPolicy = null;

        /**
         * Extension plugins.
         * @type {Array.<FileInfo> || null}
         */
        this.Plugins = null;

        /**
         * Domain name resolution configuration.
         * @type {DomainNameConfig || null}
         */
        this.DomainNameConfig = null;

        /**
         * Notification web hook configuration.
         * @type {Array.<Notification> || null}
         */
        this.NotificationHooks = null;

        /**
         * Creator name.
         * @type {string || null}
         */
        this.Owner = null;

        /**
         * Environment ID.
         * @type {string || null}
         */
        this.EnvId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Type = 'Type' in params ? params.Type : null;

        if (params.Load) {
            let obj = new Load();
            obj.deserialize(params.Load)
            this.Load = obj;
        }
        this.EncodedScripts = 'EncodedScripts' in params ? params.EncodedScripts : null;
        this.Configs = 'Configs' in params ? params.Configs : null;

        if (params.Datasets) {
            this.Datasets = new Array();
            for (let z in params.Datasets) {
                let obj = new TestData();
                obj.deserialize(params.Datasets[z]);
                this.Datasets.push(obj);
            }
        }
        this.Extensions = 'Extensions' in params ? params.Extensions : null;
        this.SLAId = 'SLAId' in params ? params.SLAId : null;
        this.CronId = 'CronId' in params ? params.CronId : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

        if (params.TestScripts) {
            this.TestScripts = new Array();
            for (let z in params.TestScripts) {
                let obj = new ScriptInfo();
                obj.deserialize(params.TestScripts[z]);
                this.TestScripts.push(obj);
            }
        }

        if (params.Protocols) {
            this.Protocols = new Array();
            for (let z in params.Protocols) {
                let obj = new ProtocolInfo();
                obj.deserialize(params.Protocols[z]);
                this.Protocols.push(obj);
            }
        }

        if (params.RequestFiles) {
            this.RequestFiles = new Array();
            for (let z in params.RequestFiles) {
                let obj = new FileInfo();
                obj.deserialize(params.RequestFiles[z]);
                this.RequestFiles.push(obj);
            }
        }

        if (params.SLAPolicy) {
            let obj = new SLAPolicy();
            obj.deserialize(params.SLAPolicy)
            this.SLAPolicy = obj;
        }

        if (params.Plugins) {
            this.Plugins = new Array();
            for (let z in params.Plugins) {
                let obj = new FileInfo();
                obj.deserialize(params.Plugins[z]);
                this.Plugins.push(obj);
            }
        }

        if (params.DomainNameConfig) {
            let obj = new DomainNameConfig();
            obj.deserialize(params.DomainNameConfig)
            this.DomainNameConfig = obj;
        }

        if (params.NotificationHooks) {
            this.NotificationHooks = new Array();
            for (let z in params.NotificationHooks) {
                let obj = new Notification();
                obj.deserialize(params.NotificationHooks[z]);
                this.NotificationHooks.push(obj);
            }
        }
        this.Owner = 'Owner' in params ? params.Owner : null;
        this.EnvId = 'EnvId' in params ? params.EnvId : null;

    }
}

/**
 * Metric provided by PTS with labels and values.
 * @class
 */
class MetricLabelWithValues extends  AbstractModel {
    constructor(){
        super();

        /**
         * Metric name.
         * @type {string || null}
         */
        this.MetricName = null;

        /**
         * Labels and values.
         * @type {Array.<LabelWithValues> || null}
         */
        this.LabelValuesSet = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MetricName = 'MetricName' in params ? params.MetricName : null;

        if (params.LabelValuesSet) {
            this.LabelValuesSet = new Array();
            for (let z in params.LabelValuesSet) {
                let obj = new LabelWithValues();
                obj.deserialize(params.LabelValuesSet[z]);
                this.LabelValuesSet.push(obj);
            }
        }

    }
}

/**
 * DeleteCronJobs response structure.
 * @class
 */
class DeleteCronJobsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * StartJob request structure.
 * @class
 */
class StartJobRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scenario ID.
         * @type {string || null}
         */
        this.ScenarioId = null;

        /**
         * Job initiator.
         * @type {string || null}
         */
        this.JobOwner = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * If is debug mode.
         * @type {boolean || null}
         */
        this.Debug = null;

        /**
         * Note.
         * @type {string || null}
         */
        this.Note = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ScenarioId = 'ScenarioId' in params ? params.ScenarioId : null;
        this.JobOwner = 'JobOwner' in params ? params.JobOwner : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Debug = 'Debug' in params ? params.Debug : null;
        this.Note = 'Note' in params ? params.Note : null;

    }
}

/**
 * DescribeScenarioWithJobs response structure.
 * @class
 */
class DescribeScenarioWithJobsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Scenario configuration with related jobs.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<ScenarioWithJobs> || null}
         */
        this.ScenarioWithJobsSet = null;

        /**
         * Total Scenarios.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ScenarioWithJobsSet) {
            this.ScenarioWithJobsSet = new Array();
            for (let z in params.ScenarioWithJobsSet) {
                let obj = new ScenarioWithJobs();
                obj.deserialize(params.ScenarioWithJobsSet[z]);
                this.ScenarioWithJobsSet.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Log response time RT range.
 * @class
 */
class ReactionTimeRange extends  AbstractModel {
    constructor(){
        super();

        /**
         * Minimum response time (ms).
         * @type {string || null}
         */
        this.Min = null;

        /**
         * Maximum response time (ms).
         * @type {string || null}
         */
        this.Max = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Min = 'Min' in params ? params.Min : null;
        this.Max = 'Max' in params ? params.Max : null;

    }
}

/**
 * Load configuration for concurrency mode
 * @class
 */
class Concurrency extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array of multi-stage configuration.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<Stage> || null}
         */
        this.Stages = null;

        /**
         * Number of iteration.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.IterationCount = null;

        /**
         * Maximum rps.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.MaxRequestsPerSecond = null;

        /**
         * Graceful termination job waiting time.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.GracefulStopSeconds = null;

        /**
         * Number of resource.

Note: This field may return null, indicating that no valid value is found.
         * @type {number || null}
         */
        this.Resources = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Stages) {
            this.Stages = new Array();
            for (let z in params.Stages) {
                let obj = new Stage();
                obj.deserialize(params.Stages[z]);
                this.Stages.push(obj);
            }
        }
        this.IterationCount = 'IterationCount' in params ? params.IterationCount : null;
        this.MaxRequestsPerSecond = 'MaxRequestsPerSecond' in params ? params.MaxRequestsPerSecond : null;
        this.GracefulStopSeconds = 'GracefulStopSeconds' in params ? params.GracefulStopSeconds : null;
        this.Resources = 'Resources' in params ? params.Resources : null;

    }
}

/**
 * DeleteAlertChannel request structure.
 * @class
 */
class DeleteAlertChannelRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Notice ID of the notification channel to be deleted.
         * @type {string || null}
         */
        this.NoticeId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.NoticeId = 'NoticeId' in params ? params.NoticeId : null;

    }
}

/**
 * DescribeErrorSummary response structure.
 * @class
 */
class DescribeErrorSummaryResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error summary information.

Note: This field may return null, indicating that no valid value is found.
         * @type {Array.<ErrorSummary> || null}
         */
        this.ErrorSummarySet = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorSummarySet) {
            this.ErrorSummarySet = new Array();
            for (let z in params.ErrorSummarySet) {
                let obj = new ErrorSummary();
                obj.deserialize(params.ErrorSummarySet[z]);
                this.ErrorSummarySet.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateProject response structure.
 * @class
 */
class UpdateProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * UpdateFileScenarioRelation response structure.
 * @class
 */
class UpdateFileScenarioRelationResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

module.exports = {
    DescribeCronJobsRequest: DescribeCronJobsRequest,
    UpdateJobRequest: UpdateJobRequest,
    UpdateCronJobResponse: UpdateCronJobResponse,
    DescribeSampleMatrixQueryResponse: DescribeSampleMatrixQueryResponse,
    DescribeSampleLogsRequest: DescribeSampleLogsRequest,
    DeleteJobsRequest: DeleteJobsRequest,
    AlertChannelRecord: AlertChannelRecord,
    DescribeAlertRecordsRequest: DescribeAlertRecordsRequest,
    DeleteAlertChannelResponse: DeleteAlertChannelResponse,
    DescribeLabelValuesRequest: DescribeLabelValuesRequest,
    AbortCronJobsResponse: AbortCronJobsResponse,
    DescribeRequestSummaryResponse: DescribeRequestSummaryResponse,
    DescribeScenarioWithJobsRequest: DescribeScenarioWithJobsRequest,
    CreateCronJobResponse: CreateCronJobResponse,
    RestartCronJobsResponse: RestartCronJobsResponse,
    SLAPolicy: SLAPolicy,
    DNSConfig: DNSConfig,
    ScriptInfo: ScriptInfo,
    NormalLog: NormalLog,
    UpdateProjectRequest: UpdateProjectRequest,
    AbortJobResponse: AbortJobResponse,
    Project: Project,
    UpdateEnvironmentRequest: UpdateEnvironmentRequest,
    DescribeRegionsResponse: DescribeRegionsResponse,
    Attributes: Attributes,
    CreateEnvironmentResponse: CreateEnvironmentResponse,
    UpdateScenarioResponse: UpdateScenarioResponse,
    File: File,
    DescribeEnvironmentsRequest: DescribeEnvironmentsRequest,
    CustomSample: CustomSample,
    CreateProjectRequest: CreateProjectRequest,
    AdjustJobSpeedRequest: AdjustJobSpeedRequest,
    DescribeRequestSummaryRequest: DescribeRequestSummaryRequest,
    HostAlias: HostAlias,
    CreateFileResponse: CreateFileResponse,
    DeleteProjectsResponse: DeleteProjectsResponse,
    GeoRegionsLoadItem: GeoRegionsLoadItem,
    UpdateEnvironmentResponse: UpdateEnvironmentResponse,
    LabelWithValues: LabelWithValues,
    Label: Label,
    ProtocolInfo: ProtocolInfo,
    VpcLoadDistribution: VpcLoadDistribution,
    SamplePair: SamplePair,
    CronJob: CronJob,
    DescribeLabelValuesResponse: DescribeLabelValuesResponse,
    InternalMetricQuery: InternalMetricQuery,
    Job: Job,
    DescribeAvailableMetricsRequest: DescribeAvailableMetricsRequest,
    CopyScenarioResponse: CopyScenarioResponse,
    DescribeSampleMatrixQueryRequest: DescribeSampleMatrixQueryRequest,
    GenerateTmpKeyResponse: GenerateTmpKeyResponse,
    Stage: Stage,
    DescribeFilesResponse: DescribeFilesResponse,
    DeleteProjectsRequest: DeleteProjectsRequest,
    UpdateFileScenarioRelationRequest: UpdateFileScenarioRelationRequest,
    ScenarioWithJobs: ScenarioWithJobs,
    DeleteJobsResponse: DeleteJobsResponse,
    TagSpec: TagSpec,
    AdjustJobSpeedResponse: AdjustJobSpeedResponse,
    ErrorSummary: ErrorSummary,
    CreateProjectResponse: CreateProjectResponse,
    DescribeSampleQueryRequest: DescribeSampleQueryRequest,
    DescribeSampleMatrixBatchQueryResponse: DescribeSampleMatrixBatchQueryResponse,
    DeleteEnvironmentsResponse: DeleteEnvironmentsResponse,
    SLALabel: SLALabel,
    AlertRecord: AlertRecord,
    RequestsPerSecond: RequestsPerSecond,
    DescribeRegionsRequest: DescribeRegionsRequest,
    DeleteScenariosResponse: DeleteScenariosResponse,
    CreateEnvironmentRequest: CreateEnvironmentRequest,
    DescribeErrorSummaryRequest: DescribeErrorSummaryRequest,
    CopyScenarioRequest: CopyScenarioRequest,
    TestData: TestData,
    SampleLog: SampleLog,
    DomainNameConfig: DomainNameConfig,
    DescribeNormalLogsResponse: DescribeNormalLogsResponse,
    Notification: Notification,
    DescribeSampleBatchQueryRequest: DescribeSampleBatchQueryRequest,
    RestartCronJobsRequest: RestartCronJobsRequest,
    DeleteScenariosRequest: DeleteScenariosRequest,
    CreateAlertChannelResponse: CreateAlertChannelResponse,
    MetricInfo: MetricInfo,
    CreateAlertChannelRequest: CreateAlertChannelRequest,
    AlertRecordStatus: AlertRecordStatus,
    DescribeAlertChannelsRequest: DescribeAlertChannelsRequest,
    SLARule: SLARule,
    DescribeAvailableMetricsResponse: DescribeAvailableMetricsResponse,
    DescribeMetricLabelWithValuesResponse: DescribeMetricLabelWithValuesResponse,
    FileInfo: FileInfo,
    LoadSpec: LoadSpec,
    AlertChannel: AlertChannel,
    DescribeEnvironmentsResponse: DescribeEnvironmentsResponse,
    ScriptOrigin: ScriptOrigin,
    ScenarioRelatedJobsParams: ScenarioRelatedJobsParams,
    Credentials: Credentials,
    DescribeAlertChannelsResponse: DescribeAlertChannelsResponse,
    CreateCronJobRequest: CreateCronJobRequest,
    UpdateJobResponse: UpdateJobResponse,
    DescribeCheckSummaryRequest: DescribeCheckSummaryRequest,
    Filter: Filter,
    DeleteFilesResponse: DeleteFilesResponse,
    AggregationLegend: AggregationLegend,
    LoadSource: LoadSource,
    CustomSampleMatrix: CustomSampleMatrix,
    Load: Load,
    CreateFileRequest: CreateFileRequest,
    RequestSummary: RequestSummary,
    DeleteCronJobsRequest: DeleteCronJobsRequest,
    DescribeSampleLogsResponse: DescribeSampleLogsResponse,
    DescribeCronJobsResponse: DescribeCronJobsResponse,
    DescribeNormalLogsRequest: DescribeNormalLogsRequest,
    DescribeJobsRequest: DescribeJobsRequest,
    DescribeFilesRequest: DescribeFilesRequest,
    AbortCronJobsRequest: AbortCronJobsRequest,
    DescribeSampleMatrixBatchQueryRequest: DescribeSampleMatrixBatchQueryRequest,
    DescribeAlertRecordsResponse: DescribeAlertRecordsResponse,
    DescribeProjectsRequest: DescribeProjectsRequest,
    DescribeSampleQueryResponse: DescribeSampleQueryResponse,
    DeleteEnvironmentsRequest: DeleteEnvironmentsRequest,
    CreateScenarioRequest: CreateScenarioRequest,
    DescribeMetricLabelWithValuesRequest: DescribeMetricLabelWithValuesRequest,
    Scenario: Scenario,
    DescribeProjectsResponse: DescribeProjectsResponse,
    UpdateCronJobRequest: UpdateCronJobRequest,
    RegionDetail: RegionDetail,
    SampleStream: SampleStream,
    DescribeCheckSummaryResponse: DescribeCheckSummaryResponse,
    DescribeScenariosRequest: DescribeScenariosRequest,
    DescribeScenariosResponse: DescribeScenariosResponse,
    CreateScenarioResponse: CreateScenarioResponse,
    AbortJobRequest: AbortJobRequest,
    DeleteFilesRequest: DeleteFilesRequest,
    CheckSummary: CheckSummary,
    NotificationHook: NotificationHook,
    DescribeJobsResponse: DescribeJobsResponse,
    GenerateTmpKeyRequest: GenerateTmpKeyRequest,
    DescribeSampleBatchQueryResponse: DescribeSampleBatchQueryResponse,
    StartJobResponse: StartJobResponse,
    UpdateScenarioRequest: UpdateScenarioRequest,
    MetricLabelWithValues: MetricLabelWithValues,
    DeleteCronJobsResponse: DeleteCronJobsResponse,
    StartJobRequest: StartJobRequest,
    DescribeScenarioWithJobsResponse: DescribeScenarioWithJobsResponse,
    ReactionTimeRange: ReactionTimeRange,
    Concurrency: Concurrency,
    DeleteAlertChannelRequest: DeleteAlertChannelRequest,
    DescribeErrorSummaryResponse: DescribeErrorSummaryResponse,
    UpdateProjectResponse: UpdateProjectResponse,
    UpdateFileScenarioRelationResponse: UpdateFileScenarioRelationResponse,

}
